gpt4 book ai didi

c++ - 基类和子类函数继承混淆(C++)

转载 作者:行者123 更新时间:2023-11-28 03:27:26 25 4
gpt4 key购买 nike

我对基类和子类的函数继承很困惑。我有那些类(class):

#include <point.h>

class Polygon{
public:
Polygon();
virtual ~Polygon();
void addPoint(Point *p);
std::string getType();
Point* getPoint(int index);
int getNumOfPoints();
int getColor();
virtual int area()=0;

private:
std::vector<Point*> _points;

int color;
std::string type = "Polygon";

};

class Rectangle : public Polygon{
public:
Rectangle();
virtual ~Rectangle();
virtual int area();

private:
std::vector<Point*> _points;

int color;
std::string type = "Rectangle";
};

现在,我主要这样做:

Rectangle rect();
rect.getType();

这给了我“多边形”,而我想要“矩形”我很确定我对继承感到困惑。所以,根据我的理解,基类函数得到了继承,但为什么当我运行函数时它与对象基类的成员相关,而不是实际对象(Rectangle)?

有人帮忙就很开心了!非常感谢

最佳答案

Rectangle::typePolygon::type 完全无关。它是一个单独的数据成员,恰好具有相同的名称。

实现预期效果的一种方法是将 getType() 设为虚拟并在每个派生类中覆盖它:

class Polygon {
public:
virtual std::string getType() = 0;
...
}

class Rectangle: public Polygon {
public:
virtual std::string getType();
...
}

std::string Rectangle::getType() {
return "Rectangle";
}

关于c++ - 基类和子类函数继承混淆(C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13554828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com