标签:
指针、引用必须注意浅深拷贝
浅拷贝:只复制地址,没复制值
缺省方式的拷贝构造和拷贝赋值,对包括指针在内的基本成员变量按字节赋值,导致浅拷贝问题。
为了获得完整意义上的对象副本,必须自己定义拷贝构造和拷贝赋值,针对指针型成员变量做深拷贝。
赋值表达式的值是操作符左值的引用。运算符重载的返回值都是自引用形式(return *this)
拷贝赋值运算符
class_name& operator = (const class_name & that)
{if(&that != this)//防止自赋值
delete class_value;//释放旧资源
class_value = new type (*that.class_value)//分配新资源
//拷贝新数据
..;
return *this;//this是对象指针,*this,代表对象本身---、、返回自引用
}
静态成员变量
静态成员属于类而不属于对象,只有一份,供所有对象所共享。
静态成员函数没有this 指针,也不可以有const;
静态成员可由对象访问,也可由类访问
静态成员变量必须在类外定义,而不能用构造函数定义
静态成员函数只能访问静态成员变量
普通成员函数可以访问静态成员变量、静态成员函数
class A { public: static int m_sdata;//静态成员变量是类的一部分,而不是对象的一部分。 //不因构造而定义,与构造函数无关,需单独定义 //全生命周期 //可通过对象访问也可通过类访问 static void set (int data) {//静态成员函数无法访问非静态成员变量,因为没有this指针 m_sdata = data; } static int get () { return m_sdata; } int m_data; }; int A::m_sdata = 10;//静态成员变量需单独定义 int main() { cout << sizeof(A) << endl;//对象的内存大小 cout << A::m_sdata << endl; A a; cout << a.m_sdata << endl; a.set(200); cout << a.get() << endl; cout << A::get() << endl; system("pause"); return 0;}
标签:
原文地址:http://www.cnblogs.com/day-up/p/5153839.html