cd网站建设,建设免费手机网站,网站建设织梦怎么样,网站开发 方案 报价单1.static成员
a#xff09;⽤static修饰的成员变量#xff0c;称之为静态成员变量#xff0c;静态成员变量⼀定要在类外进行初始化。
b#xff09;静态成员变量为所有类对象所共享#xff0c;不属于某个具体的对象#xff0c;不存在对象中#xff0c;存放在静态区。
…1.static成员
a⽤static修饰的成员变量称之为静态成员变量静态成员变量⼀定要在类外进行初始化。
b静态成员变量为所有类对象所共享不属于某个具体的对象不存在对象中存放在静态区。
例如
class A
{
public:static int _scont;
};int A::_scont 0;int main()
{cout sizeof(A) endl;cout A::_scont endl;A a1;A a2;cout a1._scont endl;cout a2._scont endl;return 0;
}
结果
这里sizeofA1这里的是1而不是0是因为表示占位这里有一个A类具体可以看看小编前面的文章“类实例化this指针”中有详细讲解可以看出static修饰的成员变量并没有放在类中而是放在静态区。_scont成员前提是在public中时可以通过A类直接访问也可以通过实例化的对象进行访问。
c⽤static修饰的成员函数称之为静态成员函数静态成员函数没有this指针。
class A{public:A(){_scount;}A(const A t){_scount;}~A(){--_scount;}static int GetACount(){_a1;return _scount;}private:// 类里面声明static int _scount;int _a1 1;int _a2 1;}; 这里正是因为没有this指针无法访问非静态变量。
e非静态的成员函数可以访问任意的静态成员变量和静态成员函数。 f突破类域就可以访问静态成员可以通过类名::静态成员或者对象.静态成员来访问静态成员变量和静态成员函数。
g静态成员也是类的成员受public、protected、private访问限定符的限制。
h静态成员变量不能在声明位置给缺省值初始化因为缺省值是个构造函数初始化列表的静态成员变量不属于某个对象不⾛构造函数初始化列表。
例如 所以这里不能给缺省值因为这种方式是通过初始化列表初始化而这种静态变量不走初始化列表初始化所以就要在类外初始化。
2.匿名对象
a⽤类型(实参)定义出来的对象叫做匿名对象相⽐之前定义的类型对象名(实参)定义出来的叫有名对象。
b匿名对象⽣命周期只在当前⼀⾏⼀般临时定义⼀个对象当前⽤⼀下即可就可以定义匿名对象。
例如
class A
{
public:A(int a 0):_a(a){cout A(int a) endl;}~A(){cout ~A() endl;}
private:int _a;
};int main()
{A();A(1);return 0;
} A aa1();不能这么定义对象因为编译器⽆法识别下⾯是⼀个函数声明还是对象定义但是可以这么定义匿名对象匿名对象的特点不用取名字但是他的⽣命周期只有这⼀⾏我们可以看到下⼀⾏他就会⾃动调⽤析构函数。
注意当引用匿名对象时就可以延长它的生命周期
例如
class A
{
public:A(int a 0):_a(a){cout A(int a) endl;}~A(){cout ~A() endl;}
private:int _a;
};int main()
{const A a1 A(0);A();A(1);return 0;
}
结果
可以看到a1是在最后才调用析构函数的延长了A0的生命周期。