如果基类和派生类有同名成员函数,那么通过基类指针指向派生类对象后,通过该指针调用这个同名成员函数,会调用基类的的函数还是派生类的
时间: 2023-10-14 14:05:24 浏览: 94
函数?
如果基类和派生类有同名成员函数,通过基类指针指向派生类对象后,通过该指针调用这个同名成员函数,会调用派生类的函数。这是因为,在派生类中定义的同名成员函数会隐藏基类中定义的同名成员函数,除非使用了特殊的语法来访问基类中的同名成员函数。如果希望调用基类中的同名成员函数,可以使用作用域解析运算符"::"来指定基类中的函数,例如base::fun()。
相关问题
基类和派生类中有相同函数,可以在不使用虚函数的情况下实例化一个派生类对象,通过这个派生类对象来调用基类和派生类的同名函数,那么虚函数的作用是什么呢?
虚函数的作用是实现多态性,即在运行时根据对象的实际类型来调用相应的函数。在没有使用虚函数的情况下,如果通过基类指针或引用来调用派生类的同名函数,那么只会调用基类的函数,而不会调用派生类的函数,这就失去了多态性。
使用虚函数可以实现运行时的动态绑定,使得程序在运行时能够根据对象的实际类型来调用相应的函数,从而实现多态性。当基类的指针或引用指向派生类对象时,通过虚函数表来确定调用哪个函数,从而实现动态绑定。因此,虚函数是实现多态性的基础,是面向对象编程中非常重要的概念。
基类和派生类的指针调用函数
当基类和派生类都有同名函数时,通过基类或派生类的指针调用函数时,会根据指针类型来决定调用哪个函数。如果指针类型是基类类型,则调用基类的函数;如果指针类型是派生类类型,则调用派生类的函数。
例如,假设有一个基类Animal和一个派生类Dog,它们都有一个同名的函数speak()。如果有一个Animal类型的指针指向一个Dog对象,那么通过该指针调用speak()函数时,会调用Dog类中的speak()函数,而不是Animal类中的speak()函数。
示例代码如下:
```c++
class Animal {
public:
virtual void speak() {
cout << "Animal speaks" << endl;
}
};
class Dog : public Animal {
public:
void speak() {
cout << "Dog barks" << endl;
}
};
int main() {
Animal* ptr = new Dog();
ptr->speak(); // 调用Dog类中的speak()函数
delete ptr;
return 0;
}
```
阅读全文