c++学习记录(七)

静态成员变量和静态成员函数

- 基本概念

  • 静态成员:在说明前面加了static关键字的成员
static int a;
static void PrintTotal();
  • 静态成员变量与普通成员变量的区别:普通成员变量每个对象各自有一份,而静态成员变量一共就一份,为所有对象共享。
  • sizeof运算符不会计算静态成员变量
class CMyclass{
int n;
static int s;}

sizeof(CMyclass)=4

  • 静态成员函数与普通成员函数的区别:普通成员函数必须具体作用于某个对象,而静态成员函数并不具体作用于某个对象
  • 静态成员(包括静态成员变量和静态成员函数)不需要通过对象就可以访问

- 如何访问静态成员

  • 类名::成员名
    CRctangle ::PrintTotal();
  • 对象名.成员名
    CRctangle r;r.PrintTotal();
    注意:不是作用于对象r
  • 指针->成员名
    CRctangle *p=&r;p->PrintTotal();
    注意:不是作用于对象r
  • 引用.成员名
    CRctangle &ref=r;int n=ref.nTotalNumber;

  • 静态成员变量本质上是全局变量,哪怕一个对象都不存在,类的静态成员变量也存在
  • 静态成员函数本质上是全局函数
  • 设置静态成员这种机制的目的是将和某些类紧密相关的全局变量和函数写到类里面,使之看上去像一个整体,易于维护和理解
  • 必须在定义类的文件中对静态成员变量进行一次说明或初始化,否则编译能通过,链接通不过
    int CRctangle::nTotalNumber=0;

- 注意事项

  • 在静态成员函数中,不能访问非静态成员变量,也不能调用非静态成员函数
    w为普通成员变量
void CRctangle::PrintTotal()
{ cout<<w<<endl;}
  • w是普通成员变量,而静态成员函数不作用于具体对象,则w不知道是哪个对象的,因此值也不知道
  • 不能调用非静态成员函数原因:非静态成员函数中可能会访问到非静态成员变量,所以也不行。

this指针

设在类Complex中有成员函数void A (int p){price=p;}
等价于C语言中有全局函数void A (struct Complex *this,int p){this->price=p;}

- 作用:

  • 指向成员函数所作用的对象
  • 非静态成员函数可以直接使用this来代表指向

- this指针和静态成员函数

  • 静态成员函数中不能使用this指针
  • 因为静态成员函数并不具体作用于某个对象
  • 因此静态成员函数的真实的参数的个数就是程序中写出的参数个数

原文链接: https://www.cnblogs.com/2002ljy/p/12255386.html

欢迎关注

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

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    c++学习记录(七)

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

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

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

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

(0)
上一篇 2023年3月1日 下午3:59
下一篇 2023年3月1日 下午3:59

相关推荐