在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
1. C的结构体和C++结构体的区别 (1)C的结构体内不允许有函数存在,C++允许有内部成员函数,且允许该函数是虚函数。所以C的结构体是没有构造函数、析构函数、和this指针的。 (2)C的结构体对内部成员变量的访问权限只能是public,而C++允许public,protected,private三种。 (3)C语言的结构体是不可以继承的,C++的结构体是可以从其他的结构体或者类继承过来的。 以上都是表面的区别,实际区别就是面向过程和面向对象编程思路的区别:
C的结构体只是把数据变量给包裹起来了,并不涉及算法。 而C++是把数据变量及对这些数据变量的相关算法给封装起来,并且给对这些数据和类不同的访问权限。 C语言中是没有类的概念的,但是C语言可以通过结构体内创建函数指针实现面向对象思想。
2. 如何在类中定义常量成员并为其初始化?解答:只能在初始化列表里对const成员初始化,像下面这样: class CBook { public: const double m_price; CBook() :m_price(8.8) { } };
3. 在定义类的成员函数时使用mutable关键字的作用是什么?解答:当需要在const方法中修改对象的数据成员时,可以在数据成员前使用mutable关键字,防止出现编译出错。例子如下: class CBook { public: mutable double m_price; // 如果不加就会出错 CBook(double price) :m_price(price) { } double getPrice() const; // 定义const方法 }; double CBook::getPrice() const { m_price = 9.8; return m_price; } 4. C++中的explicit关键字有何作用? 禁止将构造函数作为转换函数,即禁止构造函数自动进行隐式类型转换。 例如CBook中只有一个参数m_price,在构建对象时可以使用CBook c = 9.8这样的隐式转换,使用explicit防止这种转换发生。
5. 构造函数调用类的另一个构造函数问题: 在C++中,如果确定了某一个构造函数的创建过程,在该构造函数中如果调用了其它重载的构造函数, 它初始化的并不是指定的这个this了。 例子说明如下: class CBook { public: double m_price; CBook() { CBook(8.8); } CBook(double price) : m_price(price) { } }; int main() { CBook c; cout << c.m_price << endl; // 此时并不会输出理想中的8.8 }
6. 虚函数原理考点,例如下面程序的输出是什么? class A { public: virtual void funa(); virtual void funb(); void func(); static void fund(); static int si; private: int i; char c; }; 问:sizeof(A) = ? 解答: 关于类占用的内存空间,有以下几点需要注意: (1)如果类中含有虚函数,则编译器需要为类构建虚函数表,类中需要存储一个指针指向这个虚函数表的首地址,注意不管有几个虚函数,都只建立一张表,所有的虚函数地址都存在这张表里,类中只需要一个指针指向虚函数表首地址即可。 (2)类中的静态成员是被类所有实例所共享的,它不计入sizeof计算的空间 (3)类中的普通函数或静态普通函数都存储在栈中,不计入sizeof计算的空间 (4)类成员采用字节对齐的方式分配空间 答案:12(32位系统)或24(64位系统)
7. 虚继承的作用是什么? 在多继承中,子类可能同时拥有多个父类,如果这些父类还有相同的父类(祖先类),那么在子类中就会有多份祖先类。例如,类B和类C都继承与类A,如果类D派生于B和C,那么类D中就会有两份A。为了防止在多继承中子类存在重复的父类情况,可以在父类继承时使用虚函数,即在类B和类C继承类A时使用virtual关键字,例如: class B : virtual public A class C : virtual public A 注:因为多继承会带来很多复杂问题,因此要慎用。
8. 守护函数的编写过程:
9. 一个基类声明了一个virtual函数,在子类当中将这个virtual函数改成私有,之后用一个指向子类的父类指针去调用这个函数,会有什么情况,为什么? 正常执行之类的私有函数成员,不会因为是私有成员函数就发生调用错误。原因:通过父类的公有(public)成员函数接口调用,虚函数的调用其实就是找到虚函数表的相应指针。
10. 在main函数代码执行前打印一个字符串,C++该如何做,C该如何做? C++:定义一个类A,在类的构造函数中打印这么一个字符串,然后声明类A的一个对象为全局变量。 C:???不知道啊,求救! |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论