- 博客(19)
- 收藏
- 关注
原创 C++ 宏相关基础知识
定义函数宏:可以使用#define指令定义函数宏,例如: #define MAX(a, b) ((a) > (b)?(a) : (b)) 在编译过程中,所有出现的MAX(a, b)将被替换为((a) > (b)?条件编译:可以使用宏定义来进行条件编译,例如: #define DEBUG #ifdef DEBUG // 调试代码 #endif 只有在定义了DEBUG宏的情况下,才会编译DEBUG宏下的代码。在替换的名字后加括号 然后在括号中加入参数 并且在替换的代码段中将想替换的代码换成参数。
2024-01-24 16:06:20
506
原创 C++ 虚析构
子类析构重写了父类的析构函数,发生了多态,最终调用的是子类的析构。在回收对象本身的空间时,包含了父类的匿名对象,调用父类的析构。当正常写出构造析构的时候,不会调用子类析构,有可能会导致内存泄露的问题。将父类的析构函数变为虚函数。
2024-01-24 14:57:17
460
原创 C++ 继承多态下的虚函数
指向了哪个类的虚函数列表,是 子类自己的,判断依据: 真实存在的对象(new 哪个类,就指向哪个累的虚函数列表)1、继承:子类不但继承了父类的成员,也会继承父类的额虚函数列表(拷贝到子类的虚函数列表中)。3、如果子类中有单独的虚函数,则按照其声明顺序,依次添加到虚函数列表结尾。2、检查重写: 检查子类中是否有重写父类的虚函数。
2024-01-24 14:55:22
371
原创 C++ 单一类中的虚函数
vftable: 虚函数列表,本质上 虚函数的指针数组,每个元素存储的是虚函数的真正有效的地址。属于类的,每个类中存在一份。__vfptr:虚函数指针,是一个二级(void**类型)的指针,当类中存在虚函数的情况下,在定义对象时,编译器则在对象内存空间的首地址位置增加一个指针大小的空间,即是虚函数指针。虚函数调用流程:定义对象,在对象内存空间的首地址找到__vfptr,通过其描述的地址,找到虚函数列表,通过下标匹配到对应的虚函数。属于对象的在定义对象存在和初始化(在构造函数的初始化参数列表中进行的)
2024-01-24 14:52:13
398
原创 C++ 多态的基本概念
在继承的条件下,父类的指针可以指向任何继承于该类的子类对象,子类具有的形态,父类同时也具有。:相同的行为方式导致了不同的行为结果,同一行语句展现了多种不同的表现形态,即多态性。以上代码演示了实现多态的各种方法。
2024-01-24 14:20:53
478
原创 C++ 类-----隐藏 (小知识)
这时编译器会报错fun()参数不够,即为隐藏了父类的无参fun()函数,如果在子类中也加入无参fun()函数。先将子类的无参fun()注释掉 在main函数中调用fun()下面一段代码来进行解释。这时候调用就不会报错。
2024-01-20 16:09:52
592
原创 C++ 继承的优点 (自用)
本来的代码是每个类中都含有money属性,和cost,walk方法,但是这样重复的相同方法略显累赘,所以可以将这些公共的属性放在一个单独的类中,整合到一起,就变成了如下的形式。继承可以将每个类中公共的属性集合到一起形成一个单独的类,即为父类,并且让这些类继承父类的公共属性。子类继承父类的同时,拥有了这些成员,公共的成员只需要在父类中维护一份即可。当扩展子类时,不用再重复实现公共的方法,只需实现独有的方法。将公共属性都集合到People类中。
2024-01-20 15:37:59
397
原创 C++ 类的继承
在子类的初始化参数列表中,会自动调用父类的无参构造函数,在子类的初始化参数列表中,跳转到父类的构造函数。在回收对象时,回收顺序与初始化顺序相反,回收子类自己的成员,如果有其他类的成员,则调用其类的析构函数,因为定义的是子类对象,其生命周期结束,匹配自己类的析构函数,在回收对象本身的空间。可以看到先调用了父类的构造函数执行输出语句,后调用子类构造函数输出语句。可以定义子类对象,通过子类对象,对父类的成员进行调用。定义子类对象,子类和父类的构造都会执行。最后是继承的父类,调父类的析构.下面也用代码来测试一下。
2024-01-20 14:42:09
636
原创 C++ 封装链表
要注意的是添加前链表是否为空,如果链表为空,那么不存在头尾节点,则添加错误。在这里只简单写了几个关于链表的函数功能,也可以根据自己的需要,封装各种函数。并且在结构体中重载构造函数,方便新节点数据的添加。可以在链表类中封装一些与链表有关的功能。包括头尾节点,和链表长度成员属性。下面让我们来对各个函数进行测试。链表数据使用结构体进行封装。
2024-01-19 15:24:50
574
1
原创 C++ const 常量
static void funStatic() //静态函数只能使用静态成员。也可以在类的构造函数的参数列表进行初始化。变量也同样可以在这里指定初始化值。m_a的值没有被初始化成功。一般函数中的this指针为。在一般函数中可以调用常函数。如果不按照顺序初始化则。
2024-01-19 15:02:05
830
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人