在含有继承关系的类中,虚函数怎么调用
时间: 2023-06-02 19:01:45 浏览: 49
在含有继承关系的类中,虚函数可以通过以下几种方式调用:
1. 使用指向基类的指针或引用调用虚函数,如果派生类重写了该虚函数,则会调用派生类的版本。
例如:
```
class Base {
public:
virtual void foo() { cout << "Base::foo()" << endl; }
};
class Derived : public Base {
public:
virtual void foo() { cout << "Derived::foo()" << endl; }
};
int main() {
Base* ptr = new Derived();
ptr->foo(); // 输出 Derived::foo()
delete ptr;
return 0;
}
```
2. 在派生类中显式调用基类的虚函数。
例如:
```
class Base {
public:
virtual void foo() { cout << "Base::foo()" << endl; }
};
class Derived : public Base {
public:
virtual void foo() {
cout << "Derived::foo()" << endl;
Base::foo(); // 显式调用基类的虚函数
}
};
int main() {
Derived obj;
obj.foo(); // 输出 Derived::foo() 和 Base::foo()
return 0;
}
```
3. 在派生类的构造函数和析构函数中调用虚函数,以确保对象的完整性。
例如:
```
class Base {
public:
virtual void foo() { cout << "Base::foo()" << endl; }
Base() { foo(); } // 在构造函数中调用虚函数
~Base() { foo(); } // 在析构函数中调用虚函数
};
class Derived : public Base {
public:
virtual void foo() { cout << "Derived::foo()" << endl; }
};
int main() {
Derived obj; // 输出 Base::foo() 和 Derived::foo()
return 0;
}
```