在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 小助理,如未能正确解答您的问题,请继续追问。 |