- 博客(6)
- 收藏
- 关注
原创 虚函数和虚函数表
因为B是继承的A,且在B中没有重写func2,所以在B的虚函数表中存放的是A的虚函数地址,即A::func2的地址。由此,我们可以推断出,即使B中不重写任何的虚函数,只要继承于A,那么B肯定存在虚函数表,只不过内容存放的都是A的虚函数地址。如果是基类的对象,则是基类的对象。如果pa指向的是A的对象,这个地址就是A的虚函数表地址,入股是B的对象,则这个地址就是B的虚函数表地址。多态的函数调用语句被编译成根据基类指针所指向的对象中存放的虚函数表的地址,在虚函数表中查找虚函数地址,并调用虚函数的一系列指令。
2025-01-14 21:32:08
216
原创 C++ 中NULL和nullptr的区别
例如,如果有两个重载函数,一个接受int参数,另一个接受指针参数,传递NULL可能会调用接受int参数的那个函数,而不是预期的接受指针参数的那个函数。定义:nullptr是一个字面量,它的类型是nullptr_t,这是一种特殊的指针类型,专门用于表示空指针。在上面的示例中,func(NULL)的调用可能会导致编译器调用func(int),而func(nullptr)的调用会明确调用func(void*)。NULL:一个宏,定义在C和C++中,可以隐式转换为整数类型,可能会导致重载函数的选择不明确。
2024-12-02 15:49:37
344
原创 C++ 条件判断语句
但是if可以从左向右判断,当判断fast->next == NULL || fast->next->next == NULL时,会首先判断第一个,如果满足条件就会执行,不满足条件才会判断下一个判断。从逻辑上减少了if语句。因为我们要判断fast->next->next == NULL的前提是fast->next!因此,我们可以利用这一特性,将原本需要两个if嵌套判断和串联判断的语句合并成一个。C++ 的条件判断是从左向右开始判断的,但是编译时是从右向左编译的。并且这种方法相比两个if可以提供更快的速度。
2024-11-27 16:21:31
316
原创 C++ 类和对象进阶
在未出现类之前,多个函数访问相同的数据,通常需要访问全局变量。未初始化的全局变量初始值均为0,但是未初始化的局部变量的初始值是随机的,因为每次调用函数时,局部变量占用的空间都会变化,函数运行结束,局部变量对应的空间会回收。但是多个函数访问全局变量时,涉及到复杂任务会使全局变量的赋值、计算等等变得很乱。所以这也是需要类的一个原因。而对于类,我们更倾向于对象一定要初始化后使用才会比较安全,这样就引出来了构造函数。
2024-11-27 11:28:18
294
原创 C++ 类(初识)—— 抽象、封装、继承、多态
在实际编写中,两个对象之间的变量不会互相冲突,成员函数访问的数据都是一个对象内的数据,并不会访问到另一个对象的数据。类内的成员函数可以访问同类对象的私有成员。而设置私有成员的机制,叫“隐藏”,当私有成员需要修改,比如说数组扩充大小时,方便程序修改,而不是对涉及到数组的对应代码逐行修改;在C++中,结构变量不是对象,但是有成员函数的struct就是类,二者只在类成员可访问范围有差别。在编写一个类的时候,以现有的类为基础,使新类从现有的类中派生出来,达到代码扩充和重用的目的。这部分跟接近于现实中对事物的描述。
2024-11-25 16:30:02
204
原创 C++ string
原因在于string只存放字符串的地址,它并不直接存放字符串。字符串在另外的内存位置开辟空间存放。一个string的大小是固定的,在不同的编译器中大小不同,与存放的字符串的长度无关。C++ 中,string是作为一个类存在的,虽然定义时和普通变量没有什么区别。
2024-11-25 11:42:19
189
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅