静态成员

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了静态成员相关的知识,希望对你有一定的参考价值。

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

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

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

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

赋值表达式的值是操作符左值的引用。运算符重载的返回值都是自引用形式(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;}

 

以上是关于静态成员的主要内容,如果未能解决你的问题,请参考以下文章

支持动态或静态片段的不同屏幕尺寸?

java 静态代码块 代码块 构造函数 静态成员变量 成员变量的初始化顺序

分享几个实用的代码片段(第二弹)

分享几个实用的代码片段(第二弹)

片段内部静态类和gradle问题

Java类的各种成员初始化顺序如:父子类继承时的静态代码块,普通代码块,静态方法,构造方法,等先后顺