基础知识点 | 1011_静态成员,结构体变量和运算符重载
10/11
- 静态成员
1.静态数据成员 在类内声明,类外定义。可以独立访问,无需依赖任何对象的建立。其默认初始值为0。
因为一个类中,一个static变量只会有一个内存空间,虽然有多个类实例,但这些类实例中的static变量会共享同一个 内存空间。静态数据成员不属于任何对象,由类的所有对象共享。
2.静态方法 优先于对象存在,所以静态方法中不可以出现this,super关键字。
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指针,因此操作数的个数没有变化,所有的操作数都必须通过函数的形参进行传递,函数的参数与操作数自左至右一一对应。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于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)