类的静态(数据和函数)成员[C++Primer]

静态数据成员:

1.静态数据成员实际上是类域中的全局变量。

2.静态数据成员的初始化在主函数调用之前,并且不能在类的声明中出现。

3.静态数据成员的状态并不会随着一个新的对象的新建而重新定义。

4.静态数据成员的使用应该是类名称加区域分隔符加静态成员名称的,虽然我们仍然可以使用对象名加点操作符号加成员名称的方式使用,但是不推荐的,静态态类成员的特性就是属      于类而不专属于某一个对象

5.不要试图在头文件中定义(初始化)静态数据成员。在大多数的情况下,这样做会引起重复定义这样的错误。即使加上#ifndef #define #endif或者#pragma once也不行。 

6.静态数据成员被 类 的所有对象所共享,包括该类派生类的对象。即派生类对象与基类对象共享基类的静态数据成员。

类的静态(数据和函数)成员[C++Primer]派生类对象与基类对象共享基类的静态数据成员。

 1 class base{ 
 2 public : 
 3 static int _num;//声明 
 4 }; 
 5 int base::_num=0;//静态数据成员的真正定义 
 6 
 7 class derived:public base{ 
 8 }; 
 9 
10 main() 
11 { 
12 base a; 
13 derived b; 
14 a._num++; 
15 cout<<"base class static data number _num is"<<a._num<<endl; 
16 b._num++; 
17 cout<<"derived class static data number _num is"<<b._num<<endl; 
18 } 
19 // 结果为1,2;可见派生类与基类共用一个静态数据成员。 

7.静态数据成员可以成为成员函数的可选参数,普通数据成员则不行。

8.静态数据成员的类型可以是所属类的类型,普通的成员则不行,普通成员只可以是所属类的指针或者引用。

class base{ 
public : 
static base _object1;//正确,静态数据成员 
base _object2;//错误 
base *pObject;//正确,指针 
base &mObject;//正确,引用 
}; 

静态成员函数:

1.静态函数地址可以用普通函数指针存储,普通函数成员地址必须由类成员函数指针存储。

1 class base{ 
2 static int func1(); 
3 int func2(); 
4 }; 
5 
6 int (*pf1)()=&base::func1;//普通的函数指针 
7 int (base::*pf2)()=&base::func2;//成员函数指针 

2.静态成员函数属于类,没有this指针,所以不可以调用类的非静态成员。

3.静态成员函数不可以同时声明为const  virtual  volatile。

1 class base{ 
2 virtual static void func1();//错误 
3 static void func2() const;//错误 
4 static void func3() volatile;//错误 
5 }; 

1) const修饰符用于表示函数不能修改成员变量的值,该函数必须是含有this指针的类成员函数

2)静态成员函数, 可以不通过 对象来调用,也即没有隐藏的this指针。

    virtual函数一定要通过对象来调用,即有隐藏的this指针。

原文链接:http://www.cnblogs.com/cy568searchx/archive/2013/03/12/2955701.html

原文链接: https://www.cnblogs.com/cy568searchx/archive/2013/04/02/2995407.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    类的静态(数据和函数)成员[C++Primer]

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/83026

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 下午8:52
下一篇 2023年2月9日 下午8:52

相关推荐