欢迎来到我的Blog,点击关注哦💕
前面讲到了C++的入门需要学习的知识,是为了后面更好的学习。学习是不断深入的,内容是不断复杂的。笃定信心。
类的定义:类是用户自定义的数据类型,它允许将数据(成员变量)和操作数据的函数(成员函数)封装在一起。
class ClassName { public: // 公共成员声明 private: // 私有成员声明 protected: // 受保护成员声明 };
在C++ 中将 C语言中 struct升级成了类,在C++中strcut也可以声明类。
**类 **: 类的作用域是指类定义中声明的成员变量和成员函数的可见范围。类的作用域由类名和作用域解析运算符(::)共同控制。
类的实例化:指创建类的具体对象的过程。这个过程通常涉及到分配内存空间给新创建的对象,并设置其初始属性值。
例如:
class Stack { //类定义 }; int main() { Stack st; return 0; }
对象的大小类似于C语言中的结构体大小的计算方法。
class A1 { public: void f1(){} private: int _a; }; // 类中仅有成员函数 class A2 { public: void f2() {} }; // 类中什么都没有---空类 class A3 {};
确保对象地址唯一性:C++标准要求不同的对象不能具有相同的地址。如果空类的大小为0,那么在数组中连续创建多个空类对象时,这些对象将没有区分它们的内存空间,从而违反了这一原则.
避免指针运算问题:如果空类的大小为0,那么使用指针进行算术运算时将无法正确计算偏移量,因为除以0是非法的操作。这将导致编译器需要编写额外的代码来处理这些异常情况.
内存分配和对齐:新对象的分配需要不同的内存地址,且内存分配通常考虑到对齐要求。一个非零大小的空类可以确保即使是最基本的对象也至少占据一个内存单元,满足基本的内存对齐要求.
优化空间利用:C++标准允许空基类优化,即如果空类作为基类时不会与同一类型的另一个对象或子对象分配在同一地址,编译器可以选择不为其分配任何空间。这意味着空类的非零大小实际上不会增加派生类的内存占用,除非派生类本身需要更多空间.
this
指针是一个隐含的成员指针,它在类的非静态成员函数中可用,指向调用该函数的对象实例。
this
指针是一个常量指针,其指向的内容可以被修改,但指针本身不能被重新赋值。this
指针的类型是指向类类型的指针,即const ClassType*
。this
指针在成员函数的整个执行期间都存在,其生命周期与函数的其他参数相同。this
指针不是对象内存的一部分,因此不会影响对象的大小class A { public: void Print() { cout << "Print()" << endl; } private: int _a; }; int main() { A* p = nullptr; p->Print(); return 0; }
class B { public: void PrintB() { cout<<_a< B* p = nullptr; p->PrintB(); return 0; }
上一篇:用JavaScript将 NCR(Numeric Character Reference)标记转换为对应字符的方法
下一篇:基于谐波线性化方法的跟网型并网变流器/VSC宽频序阻抗建模及扫频(Matlab/Simulink平台)及文献复现