在C++中,父类和子类之间的方法调用是有限制的。如果一个函数只定义在子类中,父类的对象将无法直接调用该函数。
在你的示例代码中,`test`是一个指向`father`对象的智能指针,它无法直接调用子类`son`中定义的函数。
如果你想让`test`对象调用`son`中的函数,你可以选择两种方式:
1. 将`fun()`函数定义为虚函数,在父类和子类中都进行声明和实现,并使用`override`关键字覆盖父类中的实现。这样,调用父类指针或引用指向的子类对象时,会调用子类中的函数。
- #include <iostream>
- class father {
- public:
- virtual void fun() {
- std::cout << "Father's fun()" << std::endl;
- }
- };
- class son : public father {
- public:
- void fun() override {
- std::cout << "Son's fun()" << std::endl;
- }
- };
- int main() {
- std::unique_ptr<father> test = std::make_unique<son>();
- test->fun(); // 调用的是子类的fun()函数
- return 0;
- }
复制代码
2. 将`fun()`函数定义为静态成员函数,并通过类名来调用。这种方式可以在不创建对象的情况下直接调用函数。
- #include <iostream>
- class father {
- public:
- static void fun() {
- std::cout << "Father's fun()" << std::endl;
- }
- };
- class son : public father {
- public:
- static void fun() {
- std::cout << "Son's fun()" << std::endl;
- }
- };
- int main() {
- son::fun(); // 直接调用子类的fun()函数
- return 0;
- }
复制代码
希望能够解答你的问题!如有疑问,请随时追问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。