虚基类
时间: 2024-02-19 19:04:03 浏览: 69
虚基类是C++中一个特殊的类,它用于解决多继承时可能出现的菱形继承问题。所谓菱形继承,是指一个派生类同时继承了两个基类,而这两个基类又共同继承自同一个基类,这样就会导致派生类中会有两份来自同一个基类的数据成员和成员函数,引发二义性问题。
通过将这个共同的基类设置为虚基类,可以使得共同基类在派生类中只被继承一次,从而避免了重复继承的问题。虚基类可以通过在基类继承列表中使用virtual关键字来指定。例如:
```
class Base
{
public:
int m_data;
};
class Derived1 : virtual public Base
{
public:
void foo() { m_data = 1; }
};
class Derived2 : virtual public Base
{
public:
void bar() { m_data = 2; }
};
class Derived3 : public Derived1, public Derived2
{
public:
void foobar() { m_data = 3; }
};
```
在这个例子中,Base类被指定为虚基类,Derived1和Derived2都通过虚继承方式继承自Base类,而Derived3则同时继承自Derived1和Derived2,但由于Base类是虚基类,所以在Derived3中只有一份Base类的成员。
相关问题
下列关于虚基类的叙述中,错误的是() A. 使用虚基类可以消除由多继承产生的二义性 B. 构造派生类对象时,虚基类的构造函数只被调用一次 C. 声明“class B:virtual public A”说明类B为虚基类。 D. 建立派生类对象时,首先调用虚基类的构造函数 正确答案: C:声明“class B:virtual public A”说明类B为虚基类。;
选项C是错误的,因为声明"class B: virtual public A"说明的是类B继承了虚基类A,而不是B是虚基类。虚基类是被继承的类,而不是继承它的类。因此,选项C是错误的。选项A、B和D是正确的。使用虚基类可以消除由多继承产生的二义性;构造派生类对象时,虚基类的构造函数只被调用一次;建立派生类对象时,首先调用虚基类的构造函数。
下面是关于ios 类的叙述,正确的是( )。 A. 它是istream 类和ostream 类的虚基类 B. 它只是istream 类的虚基类 C. 它只是ostream 类的虚基类 D. 它是iostrearm 类的虚基类
D. 它是iostream 类的虚基类。
ios 类是iostream 库中定义的一个基类,它是istream 类和ostream 类的基类。在C++中,iostream 库提供了一组用于进行输入和输出的标准工具,其中包括istream 类和ostream 类,它们分别用于从流中读取数据和向流中写入数据。由于这些类有很多共同的特性,如打开和关闭流、处理缓冲区等,因此将它们的共同特征抽象出来,定义了一个名为ios 的基类,并将其作为它们的虚基类。因此,选项A是错误的;选项B和C也是错误的,因为ios 类是istream 类和ostream 类的基类,而不是它们中的一个的基类。
阅读全文