2024年5月30日发(作者:)

基类指针调用派生类函数

基类指针调用派生类函数是面向对象编程中的一种常见操作。在C++

中,基类指针可以指向派生类对象,通过这个指针可以访问基类的成员函

数,但是无法访问派生类新增的成员函数。为了能够调用派生类的函数,

需要使用虚函数的概念来实现多态性。

多态性是面向对象编程的核心概念之一,它允许使用基类的指针或引

用来调用派生类的函数,从而实现不同对象的共享接口。在C++中,通过

在基类中声明虚函数,并在派生类中重写这个虚函数,来实现多态性。

下面通过一个例子来说明基类指针调用派生类函数的用法:

```cpp

#include

class Base

public:

virtual void fun

std::cout << "Base::func( called" << std::endl;

}

};

class Derived : public Base

public:

void fun

std::cout << "Derived::func( called" << std::endl;

}

};

int mai

Base* ptr = new Derived(;

ptr->func(; // 调用Derived::func

delete ptr;

return 0;

```

在这个例子中,`Base`是基类,`Derived`是派生类,`Derived`继承

自`Base`。`Base`中声明了一个虚函数`func(`,并在`Derived`中重写了

这个函数。

在`main`函数中,首先创建了一个`Derived`对象,并将其地址赋给

了一个`Base`类型的指针`ptr`。然后通过`ptr->func(`调用了`Derived`

的`func`函数。由于`func`函数是虚函数,编译器会根据实际对象的类型

来决定调用哪个函数。因此,实际上调用的是`Derived`类中重写的

`func`函数,输出的结果是`Derived::func( called`。

这种通过基类指针调用派生类函数的方式,可以方便地实现多态性,

增加代码的灵活性和可扩展性。通过将不同类型的对象存储在统一的容器

中,可以对它们进行统一的处理。这在实际的软件开发中非常有用,可以

提高代码的可复用性和维护性。

需要注意的是,在使用基类指针调用派生类函数时,基类中的函数必

须是虚函数,并且在派生类中对这个虚函数进行重写。在派生类中重写虚

函数时,可以使用`override`关键字来提醒编译器进行检查,确保正确地

重写了基类中的虚函数。

另外,当使用基类指针调用派生类函数时,如果基类中没有声明虚函

数,或者派生类中没有重写基类中的虚函数,默认情况下会调用基类中的

函数。这是因为在编译时编译器无法确定调用的是哪个函数,只能根据指

针的类型来确定调用哪个函数。如果想要调用派生类中重写的虚函数,必

须将基类中的函数声明为虚函数。