基类和派生类的指针调用函数
时间: 2023-09-28 18:05:46 浏览: 104
当基类和派生类都有同名函数时,通过基类或派生类的指针调用函数时,会根据指针类型来决定调用哪个函数。如果指针类型是基类类型,则调用基类的函数;如果指针类型是派生类类型,则调用派生类的函数。
例如,假设有一个基类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;
}
```
相关问题
基类与派生类指针的虚函数纯虚函数
在面向对象编程中,基类和派生类是非常常见的概念。基类是一种通用类,派生类则是从基类继承而来的特定类。基类中定义的函数可以在派生类中重写,以实现不同的行为。为了实现这种多态性,我们通常使用虚函数或者纯虚函数。
虚函数是在基类中声明的,具有一个默认的实现,但是可以在派生类中重写。使用虚函数可以实现运行时多态性,也就是说,在程序运行的时候才能确定调用哪个函数。
纯虚函数是一种特殊的虚函数,没有默认的实现,必须在派生类中实现。纯虚函数只需要声明,不需要实现。使用纯虚函数可以实现接口和抽象类,强制派生类必须实现这些函数。
在使用基类和派生类指针时,如果想要调用派生类中的虚函数或者纯虚函数,需要将基类的指针或引用转换为派生类的指针或引用,然后再调用函数。如果不进行类型转换,则会调用基类中定义的函数。
基类和派生类中有相同函数,可以在不使用虚函数的情况下实例化一个派生类对象,通过这个派生类对象来调用基类和派生类的同名函数,那么虚函数的作用是什么呢?
虚函数的作用是实现多态性,即在运行时根据对象的实际类型来调用相应的函数。在没有使用虚函数的情况下,如果通过基类指针或引用来调用派生类的同名函数,那么只会调用基类的函数,而不会调用派生类的函数,这就失去了多态性。
使用虚函数可以实现运行时的动态绑定,使得程序在运行时能够根据对象的实际类型来调用相应的函数,从而实现多态性。当基类的指针或引用指向派生类对象时,通过虚函数表来确定调用哪个函数,从而实现动态绑定。因此,虚函数是实现多态性的基础,是面向对象编程中非常重要的概念。
阅读全文