假设说基类中有一个public的虚函数,在其派生类中可以调用吗
时间: 2023-06-17 11:08:24 浏览: 58
是的,派生类可以调用基类中的public虚函数。派生类可以继承基类中的所有成员,包括public虚函数。在派生类中,可以通过使用基类名限定符来调用基类的public虚函数。例如,假设基类名为Base,public虚函数名为func,则在派生类中可以使用`Base::func()`来调用基类的public虚函数。另外,如果在派生类中重新实现了基类中的虚函数,则可以通过使用关键字`override`来显式地指明这是对基类虚函数的重写。
相关问题
举一个例子,要求在派生类中定义于基类同命但不是虚函数的函数
下面是一个例子,演示了在派生类中定义与基类同名但不是虚函数的函数:
```cpp
#include <iostream>
using namespace std;
class Base {
public:
virtual void func() {
cout << "Base::func()" << endl;
}
void func(int x) {
cout << "Base::func(int)" << endl;
}
};
class Derived : public Base {
public:
void func() {
cout << "Derived::func()" << endl;
}
void func(double x) {
cout << "Derived::func(double)" << endl;
}
};
int main() {
Base* p = new Derived();
p->func(); // 调用 Derived::func()
p->func(1); // 调用 Base::func(int)
// p->func(1.0); // 错误:Base 中没有 func(double) 函数
delete p;
return 0;
}
```
在这个例子中,我们定义了一个基类 Base,其中包含一个虚函数 func 和一个非虚函数 func(int)。然后定义一个派生类 Derived,其中覆盖了基类的虚函数 func,并新增了一个非虚函数 func(double)。
在 main 函数中,我们使用基类指针指向派生类对象,并分别调用 func、func(int) 和 func(double) 函数。由于 func 是一个虚函数,因此会动态绑定到派生类的实现,输出 "Derived::func()"。而 func(int) 是一个基类的非虚函数,会直接调用基类的实现,输出 "Base::func(int)"。而 func(double) 是派生类新增的函数,无法通过基类指针调用,会导致编译错误。
派生类构造函数体中可以调用基类构造函数吗
是的,派生类构造函数体中可以通过使用基类的构造函数来初始化继承的成员变量。可以通过在派生类构造函数的成员初始化列表中调用基类构造函数来实现。例如:
```
class Base {
public:
Base(int x) {
// 基类构造函数的实现
}
};
class Derived : public Base {
public:
Derived(int x, int y) : Base(x) {
// 派生类构造函数的实现
}
};
```
在上面的例子中,`Derived` 类的构造函数通过在成员初始化列表中调用 `Base` 类的构造函数来初始化继承自 `Base` 类的成员变量。