基础知识点 | 1011_静态成员,结构体变量和运算符重载

10/11


  1. 静态成员


1.静态数据成员 在类内声明,类外定义。可以独立访问,无需依赖任何对象的建立。其默认初始值为0。
  因为一个类中,一个static变量只会有一个内存空间,虽然有多个类实例,但这些类实例中的static变量会共享同一个  内存空间。静态数据成员不属于任何对象,由类的所有对象共享。
  
2.静态方法 优先于对象存在,所以静态方法中不可以出现thissuper关键字。

3.静态方法只能访问静态成员(包括成员变量和成员方法),非静态方法可以访问静态也可以访问非静态。

1:只有类的成员函数才能说明为虚函数;  

2:静态成员函数不能是虚函数; 

3:内联函数不能为虚函数;  

4:构造函数不能是虚函数;  

5:析构函数可以是虚函数,而且通常声明为虚函数


2.结构体成员变量的补齐

  • 按照结构体中内存最大的类型为单位进行补齐

class A
{
    char a[2];
    public:
        virtual void aa(){};
};
class B:public virtual A
{
    char b[2];
    char a[2];
    public:
        virtual void bb(){};
        virtual void aa(){};
};
class C:public virtual B
{
    char a[2];
    char b[2];
    char c[2];
    public:
        virtual void cc(){};
        virtual void aa(){};
        virtual void bb(){};
};
int main()
{
    cout<<sizeof(A)<<endl<<sizeof(B)<<endl<<sizeof(C);
    return 0;
}

  • 类空间大小是成员中内存最大值的最小整数倍。
  • 虚函数会占用内存空间,这是64位系统,则占用8Byte。
  • sizeof(A) = 2+8=10,最大成员内存8,则补齐至16
  • sizeof(B) = 4+8=12,补齐至16,+sizeof(A),total=32
  • sizeof(C) = 6+8=14,补齐至16,+sizeof(B),total=48


3.运算符重载


运算符函数重载一般有两种形式:重载为类的成员函数 和 重载为类的非成员函数。


1.重载为类的成员函数

函数的参数个数比原来的操作数要少一个(后置单目运算符除外),这是因为成员函数用this指针隐式地访问了类的一个对象,它充当了运算符函数最左边的操作数。

(1) 双目运算符重载为类的成员函数时,函数只显式说明一个参数,该形参是运算符的右操作数。
(2) 前置单目运算符重载为类的成员函数时,不需要显式说明参数,即函数没有形参。
(3) 后置单目运算符重载为类的成员函数时,函数要带有一个整型形参。


2.重载为类的非成员函数

由于没有隐含的this指针,因此操作数的个数没有变化,所有的操作数都必须通过函数的形参进行传递,函数的参数与操作数自左至右一一对应。

posted @   不是勇士  阅读(339)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示