以前也断断续续看过c++的一些书籍,总是看完就忘,今天重新拾起,以前不理解的居然就理解了,难得真的归功于这几天的编码吗?趁着理解,先记录在电脑里吧。
类的数据成员是不能在声明类时初始化的,下面的写法是错误的:
class Time
{
hour = 0;
minute=0;
sec=0;
};
因为类并不是一个实体,而是一种抽象类型,并不占用存储空间,显然无法容纳数据。因此可以在类中引用 如 int &x,而不用初始化。在实例化时,再初始化。
一个对象所占用的空间大小只取决于该对象中数据成员所占用的空间,而与成员函数无关。函数代码是存储在对象空间之外的,如果对同一个类定义了n个的对象,这些对象的成员函数对应的是同一个函数代码段,而不是n个。
class Box
{
public:
Box(int h=10,int w=10,int len=10);
}可以改写为 Box(int=10,int=10,int=10);
参数初始化表:Box::Box(int h,int w,int len):height(h),width(w),length(len){}
常对象:
const 类名 对象名(实参列表); 或 类名 const 对象名(实参列表);
类的数据成员中不能包括动态分配的数据,否则在对象赋值时可能出现严重后果。Box s1,s2;
s1 = s2; 对象的赋值只对其中的数据成员赋值,而不对成员函数赋值。成员函数共占一个存储空间。
对象的复制:Box box2(box1); box1已经先建立。此时会调用 复制构造函数。或者这样写也行 Box box2=box1;
静态的数据成员在内存中只占用一份空间,而不是每个对象都为他保留一份空间,每个对象都可以引用这个静态数据成员。静态数据成员是在程序结束时才被释放。
静态数据成员只能在类外初始化。不能用参数初始化表对静态数据成员初始化。静态数据成员既可以通过对象名来引用,也可以通过类名来引用。(不论对象是否建立),如果静态数据成员是私有的,则不能在类外直接引用,必须通过公用的成员函数引用。
静态成员函数没有this指针,不能(默认访问)本类中的非静态成员。主要是用来访问静态数据成员的。
template 函数 make_pair() 可以不用写出型别,就可以生成一个pair对象。pair<int,float>(43,77.3) 与 make_pair(43,77.3) 结果不同, make_pair第二个参数为double, 因为“无任何修饰的浮点数”默认为double.