子类虚函数调用父类虚函数
时间: 2023-09-01 21:10:57 浏览: 138
在子类中重写父类的虚函数时,可以使用关键字“override”来明确表示这是一个重写函数,然后在子类中调用父类的虚函数可以使用关键字“Base::”加上父类的函数名来调用。例如:
```cpp
class Base {
public:
virtual void func() {
cout << "This is the base class." << endl;
}
};
class Derived : public Base {
public:
void func() override {
Base::func(); // 调用父类的虚函数
cout << "This is the derived class." << endl;
}
};
int main() {
Base* b = new Derived();
b->func(); // 调用Derived类的虚函数
delete b;
return 0;
}
```
输出结果为:
```
This is the base class.
This is the derived class.
```
在Derived类的func函数中,先调用了父类的func函数,然后再输出Derived类的信息。这里通过指向Derived类对象的Base指针来调用虚函数,因此会先调用Derived类的虚函数,然后再调用Base类的虚函数。
相关问题
c++ 当调用父类的hello函数时,如果存在子类 那么会调用父类的hello函数还是子类的hello函数
当在C++中调用父类的成员函数,即使有子类继承该函数,如果没有明确地通过`this->`关键字指定,那么默认只会执行父类版本的函数。这是因为C++的多态性仅限于虚函数,而静态成员函数不是虚函数,所以不会在运行时动态绑定。
如果你想要子类覆盖并调用父类的成员函数,需要在子类中重新定义该函数,并声明为`virtual`,以便在子类的对象上调用子类版本的函数。然而,对于非虚函数(如`hello()`函数),即使它在子类中被重写,如果没有特别指定,依然会调用父类的实现。
简单来说:
```cpp
// 假设有一个基类
class Base {
public:
void hello() { cout << "Hello from base class." << endl; }
};
// 子类继承并可能重写了hello函数
class Derived : public Base {
public:
// 如果未声明为virtual,这里重写的hello函数不会自动替换父类的
void hello() override { cout << "Hello from derived class." << endl; }
};
// 调用时,默认会调用Base类的hello函数,除非指定了Derived对象
Base obj;
obj.hello(); // 输出 "Hello from base class."
// 如果想在Derived对象上调用子类的hello,需要明确指定
Derived derivedObj;
derivedObj.hello(); // 输出 "Hello from derived class."
```
子类重写父类虚函数,父类虚函数会变吗
当子类重写(override)父类的虚函数时,父类的虚函数本身不会变化。父类的虚函数仍然是原来的定义,但是通过子类对象调用该虚函数时,实际执行的是子类中重写的版本。这是因为在运行时,通过父类指针或引用指向子类对象时,会根据实际对象的类型去调用相应的函数。这种行为被称为多态性。所以父类的虚函数在子类重写后,可以实现不同的功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [子类(虚函数,非虚函数)重写父类的函数(虚函数,非虚函数)等4种情况下的输出](https://blog.csdn.net/qq_43625764/article/details/103294093)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
阅读全文