page contents
Nen
Nen - 程序员

性别: 天津 - 天津市 注册于 2021-06-23

向TA求助
2850金币数
43180 经验值
1个粉丝
主页被访问 6492 次

3096 个回答

0 赞同

虚函数表是针对类的还是针对对象的?同一个类的两个对象的虚函数...

虚函数表是针对类的,类的所有对象共享这个类的虚函数表,因为每个对象内部都保存一个指向该类虚函数表的指针vptr,每个对象的vptr的存放 地址都不同,但都指向同一虚函数表。

回答于 2022-01-05 11:06

0 赞同

为什么基类的构造函数不能定义为虚函数?

虚函数的调用依赖于虚函数表,而指向虚函数表的指针vptr需要在构造函数中进行初始化,所以无法调用定义为虚函数的构造函数。

回答于 2022-01-05 11:06

0 赞同

为什么基类的析构函数需要定义为虚函数?

为了实现动态绑定,基类指针指向派生类对象,如果析构函数不是虚函数,那么在对象销毁时,就会调用基类的析构函数,只能销毁派生类对象中 的部分数据,所以必须将析构函数定义为虚函数,从而在对象销毁时,调用派生类的析构函数,从而销毁派生类对象中的所有数据。

回答于 2022-01-05 11:05

0 赞同

构造函数和析构函数能抛出异常吗?

从语法的角度来说,构造函数可以抛出异常,但从逻辑和风险控制的角度来说,尽量不要抛出异常,否则可能导致内存泄漏。 析构函数不可以抛出异常,如果析构函数抛出异常,则异常点之后的程序,比如释放内存等操作,就不会被执行,从而造成内存泄露的问题; 而且当异常发生时,C++通常会调用对象的析构函数来释放资源,如果...

回答于 2022-01-05 11:05

0 赞同

如何让一个类不能实例化?

将类定义为抽象类(也就是存在纯虚函数)或者将构造函数声明为private。

回答于 2022-01-05 11:04

0 赞同

多继承存在什么问题?如何消除多继承中的二义性?

1. 增加程序的复杂度,使得程序的编写和维护比较困难,容易出错; 2. 在继承时,基类之间或基类与派生类之间发生成员同名时,将出现对成员访问的不确定性,即同名二义性; 消除同名二义性的方法: 利用作用域运算符::,用于限定派生类使用的是哪个基类的成员; 在派生类中定义同名成员,覆盖基类中的相关成员; 3. 当...

回答于 2022-01-05 11:03

0 赞同

如果类A是一个空类,那么sizeof(A)的值为多少?

sizeof(A)的值为1,因为编译器需要区分这个空类的不同实例,分配一个字节,可以使这个空类的不同实例拥有独一无二的地址。

回答于 2022-01-05 11:03

0 赞同

覆盖和重载之间有什么区别?

覆盖是指派生类中重新定义的函数,其函数名、参数列表、返回类型与父类完全相同,只是函数体存在区别;覆盖只发生在类的成员函数中; 重载是指两个函数具有相同的函数名,不同的参数列表,不关心返回值;当调用函数时,根据传递的参数列表来判断调用哪个函数;重载可以 是类的成员函数,也可以是普通函数。

回答于 2022-01-05 11:02

0 赞同

拷贝构造函数和赋值运算符重载之间有什么区别?

拷贝构造函数用于构造新的对象; Student s; Student s1 = s; // 隐式调用拷贝构造函数 Student s2(s);  // 显式调用拷贝构造函数 赋值运算符重载用于将源对象的内容拷贝到目标对象中,而且若源对象中包含未释放的内存需要先将其释放; Student s;Student s1;s1 = s; // 使用赋值运算符 一般情况下,类中包含指针变量...

回答于 2022-01-05 11:02

0 赞同

对虚函数和多态的理解?

多态的实现主要分为静态多态和动态多态,静态多态主要是重载,在编译的时候就已经确定;动态多态是用虚函数机制实现的,在运行期间动态绑 定。举个例子:一个父类类型的指针指向一个子类对象时候,使用父类的指针去调用子类中重写了的父类中的虚函数的时候,会调用子类重写过后 的函数,在父类中声明为加了virtual关键字...

回答于 2022-01-05 11:01