如果基类没有虚函数,那么基类的指针指向派生类的对象后,可以调用派生类的成员函数吗?
时间: 2024-04-11 21:28:21 浏览: 102
如果基类没有虚函数,并且通过基类指针指向派生类的对象,那么只能调用基类中定义的成员函数,而无法直接调用派生类的成员函数。
这是因为在 C++ 中,通过指针或引用调用成员函数是根据指针或引用的类型来确定调用哪个成员函数的。当使用基类指针指向派生类对象时,编译器只会看到基类的接口,因此只能调用基类中定义的成员函数。
以下是一个示例代码,用于说明这个问题:
```cpp
class Base {
public:
void print() {
std::cout << "Base print()" << std::endl;
}
};
class Derived : public Base {
public:
void print() {
std::cout << "Derived print()" << std::endl;
}
};
int main() {
Base* ptr = new Derived();
ptr->print(); // 调用的是基类中的 print() 函数
delete ptr;
return 0;
}
```
在上述代码中,Base 类没有虚函数,Derived 类继承自 Base 类并重写了 print() 函数。当通过 Base 指针调用 print() 函数时,实际上调用的是基类中的 print() 函数,而不是派生类中重写的 print() 函数。
如果想要通过基类指针调用派生类的成员函数,可以使用强制类型转换将基类指针转换为派生类指针,然后调用派生类的成员函数。但是这样做存在风险,因为如果转换错误,可能会导致未定义的行为。因此,在没有虚函数的情况下,不建议通过基类指针来调用派生类的成员函数。
阅读全文