#include <iostream>
#include <cstdio>
using namespace std;
class A
{
public:
char ach[3];
virtual void test() { };
};
class B : public A
{
public:
char bch[3];
virtual void btest() { };
};
class C : public A
{
char cch[3];
virtual void ctest() { };
};
class D : public B, public C
{
char dch[3];
virtual void dtest() { };
};
int main()
{
cout << sizeof(A) << endl; // 8 = 1 * 4(char) + 1 * 4(virtual table)
cout << sizeof(B) << endl; // 12 = 2 * 4(char) + 1 * 4(virtual table,基类)
cout << sizeof(C) << endl; // 12 = 2 * 4(char) + 1 * 4(virtual table,基类)
cout << sizeof(D) << endl; // 28 = 5 * 4(char) + 2 * 4(virtual table,两个基类)
return 0;
}
#include <iostream>
#include <cstdio>
using namespace std;
class A
{
public:
char ach[3];
virtual void test() { };
};
class B : virtual public A
{
public:
char bch[3];
virtual void btest() { };
};
class C : virtual public A
{
char cch[3];
virtual void ctest() { };
};
class D : virtual public B, virtual public C
{
char dch[3];
virtual void dtest() { };
};
int main()
{
cout << sizeof(A) << endl; // 8
cout << sizeof(B) << endl; // 16
cout << sizeof(C) << endl; // 16
cout << sizeof(D) << endl; // 32
return 0;
}
分享到:
相关推荐
- 在含有虚函数的类中,每个对象都有一个虚表指针,虚表包含了类中所有虚函数的地址。这样,通过虚函数调用,即使指针类型是基类,也可以调用派生类的相应实现。 7. **赋值函数**: - 通常用于对象之间的值复制,...
10. 类型转换函数用于实现一个类对象转换到另一个类型,不能带有参数,也不能有返回值。 二、判断正误题 1. 虚函数的声明要求在基类和派生类中保持一致,确保基类指针或引用能够正确地进行多态调用。 2. 抽象类不...
* 在大部分 C++ 的实现中,带有虚函数的类的前 4 个字节是虚函数表的入口地址。 结构体和字节对齐 * 在 32 位 Windows 系统或 Linux 系统下,结构体 `A`、`B` 和 `C` 的大小分别是 3、6 和 7 字节。 * C 语法的...
在使用typeid时,如果想要得到派生类的类型信息(当表达式实际指向派生类的对象时),必须确保表达式指向的是多态类型(即含有虚函数的类),并取消引用指针,否则得到的将是静态类型信息或指针的类型信息。...
如果一个类没有定义任何构造函数,编译器会自动生成一个不带参数的构造函数。 在C++中,一个类只能有一个析构函数。函数参数有默认值时,并不要求该参数之后的所有参数都有默认值,这是错误的理解。解决C++中菱形...
虚函数表是实现多态的关键,它是一个指向虚函数指针的数组,每个对象都有一个虚函数表指针。 **18. 虚函数与重写** 虚函数可以在派生类中被重写,从而实现不同的行为。 **19. 抽象类** 抽象类是包含至少一个纯虚...
重写是指派生类中有与基类中同名同参数列表的虚函数;隐藏是指派生类中的函数与基类的函数名相同但参数列表不同,使基类的函数被隐藏。 #### 36. C++多态实现 C++的多态是通过虚函数实现的,即通过基类指针或引用...
C++通过虚函数实现多态,虚函数在基类中声明为`virtual`,在派生类中可以重写。纯虚函数(`virtual <函数名>(<参数表>) = 0`)使得基类成为抽象类,不能实例化,但可以被继承。 4. **文件I/O操作**:在C++中,我们...
8. 在派生类中定义虚函数时,函数名、参数列表必须与基类中的虚函数一致,只有函数体可以不同,选项D正确。 9. C++是C语言的超集,包含了C的全部语法,但C++是面向对象的,而C语言是面向过程的,选项C错误。 10. ...
GroupBox通常用于创建带有标题的框,而Panel更通用,可以用于布局管理,提供背景颜色等功能。 4. **函数调用栈**:函数调用时,栈空间用于保存局部变量、函数参数和返回地址。栈操作包括分配空间、传递参数、保护...
29. 子类覆盖父类的虚函数时,即使不加`virtual`关键字,由于C++的隐式继承规则,仍然可以实现多态。但是,为了代码清晰,通常建议显式添加`virtual`。 以上内容涵盖了C++中的多个关键概念,这些知识对于理解和编写...
22. **多态性**:C++通过虚函数实现多态性,允许子类重写父类的函数,从而实现动态绑定。 23. **字符串输入输出**:`cin`读取字符串时遇到空格、制表符或换行符会停止,而`cout`输出字符串时会显示整个字符串,直到...
每个类只能有一个析构函数,其名称与类名相同,但前面带有波浪线`~`。析构函数没有参数,且通常在类体外定义。因此,正确答案是A。 4. **数组的定义**:在C++中,数组的正确定义方式是使用方括号`[]`。选项A定义了...
不能用sizeof()函数 A1: 16位的系统下, int i = 65536; cout ; // 输出0; int i = 65535; cout ; // 输出-1; 32位的系统下, int i = 65536; cout ; // 输出65536; int i = 65535; cout ; // 输出65535; A2:...
- **权重**:边可以带有权重。 **2. 图的表示** - **邻接矩阵**:使用二维数组表示图的邻接关系。 - **邻接表**:使用链表表示图的邻接关系。 **3. DFS&BFS** - **深度优先搜索(DFS)**:尽可能深地搜索树的...
CruiseYoung提供的带有详细书签的电子书籍目录 http://blog.csdn.net/fksec/article/details/7888251 该资料是《Visual C++ 2005入门经典》的源代码及课后练习答案 对应的书籍资料见: Visual C++ 2005入门经典 ...
22. **多态性实现**:多态性是通过虚函数实现的,选项C是正确的。 23. **输入输出操作**:`cin`读取字符串时,遇到空格、制表符或换行符停止,`cout`输出字符串时会输出整个字符串,因此选项D是正确的。 24. **...
虚函数用于实现多态性,允许派生类重写基类的成员函数。纯虚函数是一种特殊的虚函数,没有具体的实现,必须在派生类中重写。示例代码如下: ```cpp class Base { public: virtual void func() = 0; // 纯虚函数 };...
- **float**, **double**, **long double**:浮点数类型,用于表示带有小数点的数值。其中,`double` 的精度高于 `float`,而 `long double` 的精度则更高。 - **signed**, **unsigned**:标识变量是否可以有符号...