随笔分类 -  C++ 面向对象

摘要:1. this指针的用处 一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。 this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也就是说,即使你没有写上this指针,编译器在编译的时候也 阅读全文
posted @ 2024-03-21 18:49 小熊酱 阅读(13) 评论(0) 推荐(0) 编辑
摘要:1. 类的访问属性:public,protect,private C++中类的成员变量和函数都带有三种属性中的一种,假如没有特别声明,那么就默认是私有的(除了构造函数)。public表示是公开的,对象可以直接调用的变量或者函数;protect表示是保护性的,只有本类和子类函数能够访问(注意只是访问, 阅读全文
posted @ 2024-03-21 16:45 小熊酱 阅读(276) 评论(0) 推荐(0) 编辑
摘要:1. 继承体系中的内存模型 我们都知道,在C++中,不存在大小是零的类。即便是空类,也要占据一个字节,否则无法比较两个空类对象是否是同一个对象(在C/C++中,默认使用地址来判断两个变量是否是同一个)。 class BaseEmpty { public: BaseEmpty() { std::cou 阅读全文
posted @ 2024-03-21 16:08 小熊酱 阅读(42) 评论(0) 推荐(0) 编辑
摘要:纯虚函数优点 防止派生类忘记实现虚函数,纯虚函数使得派生类必须实现基类的虚函数。 在某些场景下,创建基类对象是不合理的,含有纯虚拟函数的类称为抽象类,它不能直接生成对象。 声明方法: 在基类中纯虚函数的方法的后面加 =0。 virtual void funtion()=0; virtual std: 阅读全文
posted @ 2024-03-21 16:00 小熊酱 阅读(16) 评论(0) 推荐(0) 编辑
摘要:1. 普通类对象是什么布局? struct Base { Base() = default; ~Base() = default; void Func() {} int a; int b; }; int main() { Base a; return 0; } 2. 带虚函数的类对象是什么布局? s 阅读全文
posted @ 2024-03-21 13:11 小熊酱 阅读(9) 评论(0) 推荐(0) 编辑
摘要:问题:C++面向对象编程时,如果我们没有声明任何构造函数constructor,按照以前最初学习,说编译器会自动合成一个默认的无参构造函数default constructor,但是事实确实是这样吗,存不存在例外呢,即使有合成构造函数,那么它又将对类数据进行怎样的初始化呢? 1. 问题一 如果我们没 阅读全文
posted @ 2024-03-21 11:59 小熊酱 阅读(39) 评论(0) 推荐(0) 编辑
摘要:1. 背景 RTTI的英文全称是"Runtime Type Identification",中文称为"运行时类型识别",它指的是程序在运行的时候才确定需要用到的对象是什么类型的。用于在运行时(而不是编译时)获取有关对象的信息。 在C++中,由于存在多态行为,基类指针或者引用指向一个派生类,而其指向的 阅读全文
posted @ 2024-03-21 11:26 小熊酱 阅读(344) 评论(0) 推荐(0) 编辑
摘要:1. 类的大小与什么有关系? 与类大小有关的因素:普通成员变量,虚函数,继承(单一继承,多重继承,重复继承,虚拟继承)。 与类大小无关的因素:静态成员变量,静态成员函数及普通成员函数。 2. 空类 空类即什么都没有的类,按上面的说法,照理说大小应该是0,但是,空类的大小为1,因为空类可以实例化,实例 阅读全文
posted @ 2024-03-21 10:54 小熊酱 阅读(72) 评论(0) 推荐(0) 编辑
摘要:1. 多重继承 多重继承示例代码如下: class Base1 { public: void f0() {} virtual void f1() {} int a; }; class Base2 { public: virtual void f2() {} int b; }; class Deriv 阅读全文
posted @ 2024-03-20 22:09 小熊酱 阅读(69) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示