类B是类A的公有派生类,类A和类B都定义了虚函数fun,p是一个指向类A对象指针,则p-》
时间: 2024-02-18 17:05:26 浏览: 25
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,需要在构造函数中进行初始化。
如何让类A的公有类成员函数访问类B的公有类成员函数
可以在类A的公有类成员函数中使用类B的对象来调用类B的公有类成员函数。具体来说,可以在类A的公有类成员函数中创建一个类B的对象,然后通过该对象来调用类B的公有类成员函数。另外,如果类B的公有类成员函数是静态成员函数,也可以直接通过类名来调用。