类B是类A的公有派生类,类A和类B都定义了虚函数fun,p是一个指向类A对象指针,则p->A::func()将A. 根据p所指的对象类型而确定调用类A中或类B中的函数func( ) B. 调用类B中的函数func( ) C. 调用类A中的函数func( ) D. 既调用类A中函数,也调用类B中的函数
时间: 2024-02-19 22:02:25 浏览: 64
C. 调用类A中的函数func()。使用作用域解析运算符"::"可以显式地指定调用哪个类中的成员函数。在这种情况下,p指向类A对象,因此调用p指向的对象的虚函数fun()时,使用作用域解析运算符"::"显式指定使用类A中的虚函数fun(),而不是类B中的虚函数fun(),即p->A::fun()将调用类A中的虚函数fun()。
相关问题
类B是类A的公有派生类,类A和类B都定义了虚函数fun,p是一个指向类A对象指针,则p-》
fun()调用的是类A中的虚函数fun。在C++中,虚函数实现了多态性,可以使得通过基类指针或引用调用派生类中的函数时,调用的是派生类中的实现。但是,在这种情况下,调用的是哪个版本的虚函数取决于指针或引用的静态类型,而不是动态类型。因此,由于p是一个指向类A对象的指针,调用p指向的对象的虚函数fun()时,调用的是类A中的虚函数fun(),而不是类B中的虚函数fun()。如果想要调用类B中的虚函数fun(),需要将p的类型转换为类B的指针类型,如下所示:
```
B* q = static_cast<B*>(p);
q->fun(); // 调用类B中的虚函数fun()
```
公有继承了类A和类C的类B的构造函数应该是怎样的
如果类B同时公有继承了类A和类C,那么类B的构造函数应该分别调用类A和类C的构造函数来初始化从类A和类C继承的成员变量。在类B的构造函数的初始化列表中,应该先使用类A的构造函数来初始化从类A继承的成员变量,再使用类C的构造函数来初始化从类C继承的成员变量。例如:
```
class A {
public:
A(int a) : _a(a) {}
private:
int _a;
};
class C {
public:
C(int c) : _c(c) {}
private:
int _c;
};
class B : public A, public C {
public:
B(int a, int b, int c) : A(a), C(c), _b(b) {}
private:
int _b;
};
```
在这个例子中,类B同时公有继承了类A和类C,类B的构造函数分别调用类A和类C的构造函数来初始化从类A和类C继承的成员变量。同时,类B也有自己的成员变量_b,需要在构造函数中进行初始化。