C++笔记121025
类初步
类定义形如
1 class Matrix{ 2 public: 3 //operations on Matrix objects will go here 4 private: 5 vector<double> data; 6 };
重要的是不要遗忘后面的“;“
此外,也可以使用关键词struct替换class定义类。struct从C继承而来,与class的唯一差别在于默认访问标号,struct默认为public,而class默认为private
类成员在定义时不能做初始化。只能在对象定义时调用构造函数初始化。
注意C++中private封装是对类而不是对对象做的。亦即虽然private成员不能被外部访问,但是对象A可以访问对象B的private成员。这一点与java不同。
头文件
通常将源代码写在多个文件中,用头文件来做逻辑关联,分别编译。最后链接。
头文件中只能放声明不能放定义,因此头文件中对变量必须加extern关键字,以及放函数声明。但是存在三个例外:类定义,编译时就可以知道值的const对象以及inline函数的定义。const对象之所以可以放在头文件中是因为const变量是文件局部变量。
事实上大部分编译器在编译时会用常量表达式替换const变量,这样就不会占用内存空间。
为避免同一个头文件在一个cpp文件中被多次#include,应该在头文件中加入预编译处理。
形如
1 #ifndef HEAD_H 2 #define HEAD_H 3 // Definition of class, declaration of variable etc.. 4 #endif
这称为头文件保护符。注意头文件保护符并不能避免链接时的重定义问题,这就是为什么我们要求头文件中只能放声明的原因。亦即不能认为加入了头文件保护符就可以把定义放在头文件中,这样可以通过编译,但是链接时会报错。