如果想要调用派生类的 foo() 函数,应该怎么写
时间: 2023-11-27 19:54:34 浏览: 35
调用派生类的 `foo()` 函数可以通过以下两种方式实现:
1. 使用指向派生类对象的指针或引用来调用 `foo()` 函数。例如:
```
Base* ptr = new Derived(); // 使用指向派生类对象的基类指针
ptr->foo(); // 调用派生类的 foo() 函数
```
2. 在派生类中重新定义 `foo()` 函数,然后通过对象调用该函数。例如:
```
class Derived : public Base {
public:
void foo() {
// 重新定义 foo() 函数
// ...
}
};
Derived d;
d.foo(); // 调用派生类的 foo() 函数
```
需要注意的是,如果在派生类中重新定义了 `foo()` 函数,而且希望在派生类中调用基类的 `foo()` 函数,可以使用作用域解析运算符 `::`。例如:
```
class Derived : public Base {
public:
void foo() {
// 重新定义 foo() 函数
Base::foo(); // 调用基类的 foo() 函数
// ...
}
};
```
相关问题
派生类调用基类成员函数
派生类可以通过基类指针或引用来调用基类成员函数。例如,假设有一个基类`Base`和它的派生类`Derived`,并且`Base`类中有一个成员函数`foo()`,派生类`Derived`中也有一个成员函数`foo()`,那么可以通过以下两种方式来调用基类`Base`中的`foo()`函数:
1. 通过基类指针或引用来调用基类函数:
```
Derived d;
Base* b = &d; // 指向派生类对象的基类指针
b->foo(); // 调用基类中的 foo() 函数
```
2. 在派生类中显式调用基类的函数:
```
class Derived : public Base {
public:
void foo() {
Base::foo(); // 显式调用基类中的 foo() 函数
// ...
}
};
```
基类派生类有相同成员函数函数
如果基类和派生类都有相同的成员函数名,那么在派生类中调用该函数时,会覆盖掉基类中的同名函数。如果需要在派生类中调用基类中的同名函数,可以使用作用域解析运算符"::"。以下是一个示例:
```
#include <iostream>
using namespace std;
class Base {
public:
void foo() {
cout << "Base foo" << endl;
}
};
class Derived : public Base {
public:
void foo() {
cout << "Derived foo" << endl;
}
void callBaseFoo() {
Base::foo(); // 调用基类中的 foo 函数
}
};
int main() {
Derived d;
d.foo(); // 调用派生类中的 foo 函数
d.callBaseFoo(); // 调用基类中的 foo 函数
return 0;
}
```
在上面的代码示例中,派生类Derived中定义了一个同名的成员函数foo(),但是在callBaseFoo()成员函数中,使用了Base::foo()来调用基类中的同名函数。当派生类的对象调用foo()函数时,会调用派生类的foo()函数,而在callBaseFoo()函数中调用foo()函数时,会调用基类的foo()函数。