C++学习笔记(1)
来源:互联网 发布:诺基亚5300软件 编辑:程序博客网 时间:2024/06/16 16:20
今天开始学习C++语言。
先来看一段程序:
#include <iostream>
using namespace std;
void read() { cout << "read()/n"; }
void sort() { cout << "sort()/n"; }
void compact() { cout << "compact()/n"; }
void write() { cout << "write()/n"; }
int main()
{
read();
sort();
compact();
write();
return 0;
}
这段程序的功能是输出四个字符串以证明四个函数起作用。其中函数的定义部分不用额外说明,就说两个问题。
1. #include <iostream>
2. using namespace std;
第一个问题中,我们惊奇地发现,在iostream后面什么也没有,而传统的C语言会有“.h”的后缀。在C++规范里,所有的“.h”头文件都去掉了。但是编译器生产商为了向前兼容,使标准出台以前的程序都能用,仍然提供了“.h”头文件。所以,凡是有“.h”的头文件都不在C++标准之列,在实际工作中要避免使用。
第二个问题与第一个问题紧密相关。在C++中引入了一个namespace的概念,叫“命名空间”,其目的在于避免和减少命名冲突。由于在大型项目中会有多人合作,传统的C语言只能通过人为方法来解决命名冲突的问题(如长文件名),这样,程序员在写程序的时候就受到了限制。采用命名空间就可以避免这一问题。
如果我们把程序中的"using namespace std"一行去掉,会有什么样的结果呢?编译会出错,并提示:cout : undeclared identifier,即未定义的标识符。这是因为cout是一个iostream对象,也就是一个输出流对象。它的确在iostream中定义了。但是,它的全称应该写成std::cout。这个std就是一个namespace,所有标准库里的东西都被封装在std这个namespace里。所以,编译器在这里就不能认出cout,因为它不在全局名字空间里。
于是我们可以把"using namespace std"一行去掉,并把程序中的cout改成std::cout,就可解决这个问题。
当然,如果不想这么麻烦,就留着"using namespace std"一行,下面直接用cout。
还有一种解决办法就是,把"using namespace std"换成"using std::cout",这样更纯洁,只用了std空间的cout方法。
但是,一定不要用<iostream.h>,这样不符合C++规范,也污染了全局空间。
为了进一步巩固命名空间的概念,我们来分析下面这个程序。
#include <iostream>
#include <string>
using namespace std;
namespace myown1{
string UserName="myown1";
}
namespace myown2{
string UserName="myown2";
}
int main()
{
cout << "/n" << "Hello," << myown1::UserName << "...and goodbye!/n";
cout << "/n" << "Hello," << myown2::UserName << "...and goodbye!/n";
return 0;
}
这个程序包含了两个头文件:iostream和string,并使用了一个std的命名空间。在这之后,又定义了两个用户命名空间,其中的变量名是相同的,只是用户空间不同。在主函数体中,通过显式调用来访问各自命名空间的变量。
还可以做如下修改。
int main()
{
using namespace myown1;
cout << "/n" << "Hello," << UserName << "...and goodbye!/n";
using namespace myown2;
cout << "/n" << "Hello," << myown2::UserName << "...and goodbye!/n";
return 0;
}
通过使用程序开头的预编译指示器来使用命名空间的变量,从而不用显式地调用;但是第二个变量就只能用显式调用,因为程序无法区分是哪个命名空间的变量。
- 【c/c++】学习笔记1
- C学习笔记1
- C 学习笔记1
- C--学习笔记1
- c sharp学习笔记1
- C语言学习笔记(1)
- object c学习笔记(1)
- 狂人C学习笔记(1)
- C: 入门学习笔记(1)
- C语言学习笔记1
- object-c学习笔记-1
- c语言学习笔记1
- C++primer学习笔记(1)
- C++Primer学习笔记《1》
- Objective-C 学习笔记1
- Object-c学习笔记(1)
- C语言学习笔记1
- C语言学习笔记1
- 今天开始不用C++
- 苦笑不迭的办公室定律
- 希望i_like_cpp大哥积极点写BLOG
- 生成静态页面的方法
- JFC/Swing的实用知识(1)
- C++学习笔记(1)
- Hibernate VS iBATIS
- Java动态代理实现
- [转]MVC with PHP(一)
- 05-07-4 下午 Clocker 发布 2.5 正式版
- WEB交互界面易用性设计和验收的指导性原则
- [转] MVC with PHP(二)
- 感受Web标准,第一次DIV+CSS
- JAR中CLASS需引用其他JAR,配置MF文件是否能把这两个JAR打包到一个JAR中并运行通过