gpt4 book ai didi

c++ - 获取定义为父类的子类输出子函数

转载 作者:行者123 更新时间:2023-11-28 00:21:46 26 4
gpt4 key购买 nike

我有一个这样定义的类:

#include <vector>
#include <string>
#include <iostream>
#include <sstream>

using namespace std;

class Shape {
protected:
float width, height;
public:
virtual ~Shape(){}

void set_data (float a, float b){
width = a;
height = b;
}

virtual string getType() {
return "Shapes";
}
};

class Polygon: public Shape {
public:
virtual ~Polygon(){};

virtual string getType() {
return "Polygon";
}
};

class Triangle: public Polygon {
public:
virtual ~Triangle(){};

virtual string getType() {
return "Triangle";
}
};

我想得到一个使用这个类的程序

int main () {
Shape poly = Polygon();
Shape tri = Triangle();
std::cout << poly.getType() << std::endl;
std::cout << tri.getType() << std::endl;
return 0;
}

有没有办法让 poly.getType() 打印出 Polygon,例如?现在它正在打印出 Shapes。我知道如果我做了

Polygon poly = Polygon()

这确实有效,但我想将 poly 存储为 Shape 对象,使用 Polygon 构造函数构造它,并确保

poly.getType()

返回 Polygon,而不是 Shapes

最佳答案

多态性只适用于非值类型;即带有引用和指针。由于引用必须立即绑定(bind),因此它们在这里用处不大。

你最好的选择是使用 std::unique_ptr<Shape> poly(new Polygon());并使用

调用

poly->getType();

我正在使用 std::unique_ptr所以我不需要调用delete明确地。 std::shared_ptr也可以,但请务必查阅文档,以便使用最适合您的用例的文档。

顺便说一句,你不需要重复virtual在覆盖子类中的函数时。你只需要标记函数virtual在基类中。

关于c++ - 获取定义为父类的子类输出子函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27159838/

26 4 0
文章推荐: html - 强制
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com