类A被类B虚继承之后,类B占多大 类A被类C虚继承之后,类C占多大
时间: 2024-06-03 20:05:10 浏览: 12
当类A被类B虚继承之后,类B将包含一个指向A的指针,这个指针的大小是与系统有关的,一般来说是4个字节或8个字节(32位或64位系统)。所以,类B占用的空间大小将比类A稍微大一些。
当类A被类C虚继承之后,类C也将包含一个指向A的指针,大小同样是与系统有关的。所以,类C占用的空间大小将比类A稍微大一些。同时,由于类C中包含了指向A的指针,这也意味着在访问类A中的数据成员时需要通过指针进行间接访问,这可能会影响程序的性能。
相关问题
虚基类是用来解决多继承中公共基类在派生类中只产生一个基类成员对象的问题
是的,虚基类可以用来解决多继承中的“菱形继承”问题,即一个派生类从两个不同的基类继承了同一个公共基类,导致在派生类中存在多个相同的公共基类成员对象。这个问题可以通过将公共基类声明为虚基类来解决,虚基类在派生类中只会产生一个基类成员对象,从而避免了冗余和不一致性。在声明虚基类时,需要在基类名前加上关键字“virtual”。例如:
```
class A {
public:
int x;
};
class B : virtual public A {
public:
int y;
};
class C : virtual public A {
public:
int z;
};
class D : public B, public C {
public:
int w;
};
```
在上面的代码中,A 是一个虚基类,B 和 C 都通过虚继承方式继承了 A。当派生类 D 继承 B 和 C 时,只会产生一个 A 基类成员对象,避免了冗余和不一致性问题。
c++多重继承的子类,其父类如果含有虚函数,那么子类如何去调用自身的非虚成员函数
子类可以通过作用域限定符来调用自身的非虚成员函数。其语法为:`子类名::函数名()`。
例如,假设有两个父类 A 和 B,均含有虚函数 func(),并且子类 C 继承了 A 和 B。子类 C 还定义了一个非虚成员函数 non_virt_func()。如果想要在子类 C 中调用 non_virt_func(),可以使用如下语法:
```
class C : public A, public B {
public:
void non_virt_func() {
// 子类自身的非虚成员函数
}
};
int main() {
C c;
c.non_virt_func(); // 调用子类自身的非虚成员函数
c.A::func(); // 调用父类 A 的虚函数
c.B::func(); // 调用父类 B 的虚函数
return 0;
}
```
在子类 C 中,可以直接调用 non_virt_func() 函数。如果需要调用父类 A 或 B 的虚函数 func(),则可以使用作用域限定符指定父类的名称。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)