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`关键字来提醒编译器进行检查,确保正确地
重写了基类中的虚函数。
另外,当使用基类指针调用派生类函数时,如果基类中没有声明虚函
数,或者派生类中没有重写基类中的虚函数,默认情况下会调用基类中的
函数。这是因为在编译时编译器无法确定调用的是哪个函数,只能根据指
针的类型来确定调用哪个函数。如果想要调用派生类中重写的虚函数,必
须将基类中的函数声明为虚函数。
发布评论