静态成员

指针、引用必须注意浅深拷贝

浅拷贝:只复制地址,没复制值

缺省方式的拷贝构造和拷贝赋值,对包括指针在内的基本成员变量按字节赋值,导致浅拷贝问题。

为了获得完整意义上的对象副本,必须自己定义拷贝构造和拷贝赋值,针对指针型成员变量做深拷贝。

赋值表达式的值是操作符左值的引用。运算符重载的返回值都是自引用形式(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;}
原文地址:https://www.cnblogs.com/day-up/p/5153839.html