调用实际对象而不是父类的方法
Calling methods of actual object instead of parent class
我有以下虚拟代码:
#include <iostream>
#include <vector>
using namespace std;
class Parent {
public:
void printHello() {
cout << "Hello Parent" << endl;
}
};
class Child : public Parent {
public:
void printHello() {
cout << "Hello Child" << endl;
}
};
int main() {
vector<Parent*> list;
Child child;
list.push_back(&child);
list[0]->printHello();
}
Output: Hello Parent
我正在尝试创建从父类派生的类的对象列表。 遍历它们并运行它们都继承和重写的方法。
我假设子类中的方法会覆盖父类中的方法。
我也尝试过使用 vector<Parent>
而不是 vector<Parent*>
的方法。
结果是一样的。如何调用派生类的方法而不是父类?
使用虚拟方法 - http://en.cppreference.com/w/cpp/language/virtual。在此处阅读有关它们的更多信息。
#include <iostream>
#include <vector>
class Parent {
public:
// using virtual keyword
virtual ~Parent() = default;
virtual void printHello() const { std::cout << "Hello Parent" << std::endl; }
};
class Child : public Parent {
public:
// using override keyword though its not necessary
void printHello() const override { std::cout << "Hello Child" << std::endl; }
};
int main()
{
std::vector<Parent *> list;
Child child;
list.push_back(&child);
list[0]->printHello();
}
输出 -
你好孩子
在C++中,您必须在父类方法定义中使用 virtual 来指定您将使用多调方法。C++中的默认行为不是多义的。
#include <iostream>
#include <vector>
using namespace std;
class Parent {
public:
virtual void printHello() {
cout << "Hello Parent" << endl;
}
};
class Child : public Parent {
public:
void printHello() {
cout << "Hello Child" << endl;
}
};
查看此内容以获取更多信息: C++中的多态性
若要获取所需的行为,需要在父类中声明该方法virtual
。有关详细信息,请参阅 http://en.cppreference.com/w/cpp/language/virtual。
相关文章:
- 从父类方法返回子类对象
- c++, 在子类中,如何在没有对象的情况下访问父类的方法?
- 派生类调用父类的方法,该方法调用重写的虚拟方法调用错误的方法
- 如何使父类不重复已经执行的祖父方法
- Arduino在子类中使用父类方法
- 在父类中为多个子类定义方法
- 父类使用来自子项的方法
- 不实现父类的虚拟方法有什么风险
- 将"this"从父类方法转换为子类方法是一种好的做法吗?
- 从C++中的父类实例访问子类方法
- 按名称调用父级中的子类方法
- 使用父类方法覆盖的多重继承
- 删除父类时,方法局部静态变量会发生什么情况
- 为什么父类的父类方法在没有显式范围解析的情况下无法访问?
- 函数调用父类方法而不是子类方法
- C++父类,调用子类中的方法,调用父类方法
- 如何在PIMPL模式下从嵌入类中访问父类方法
- 从对象指针调用父类方法
- 派生类不能访问父类方法
- 父类方法中不兼容的cv限定符