方法问题

来源:8-17 面向对象的抽象法则2

慕尼黑8261772

2020-08-22

#include <iostream>
class Shape{
public:
    virtual double Area(){ return 0; };
    void Display(){
        std::cout<<Area()<<std::endl;
    };
};

class Square: public Shape{
public:
    Square(double len):_len(len){}
    double Area() const{
        return _len*_len;
    }

private:
    double _len;
};

class Circle: public Shape{
public:
    Circle(double radius):_radius(radius){};
    double Area() const{
        return 3.1415926*_radius*_radius;
    }
private:
    double _radius;
};
int main() {
    Square s1(2.0);
    Circle c1(2.0);
    s1.Display();
    s1.Area();
    return 0;
}

Display的方法是shape类的,不是Square类的。打印出来是0

写回答

2回答

quickzhao

2020-08-23

一般来说,C++要实现多态需要用指针,你好好看看视频里面多态怎么用的。

0
1
慕尼黑8261772
非常感谢!
2020-08-24
共1条回复

little_forest

2020-09-20

你这里的问题应该是子类重写的Area的返回值有const,但是抽象方法返回值没有const.所以没有真正的重写,访问的是基类的方法。

3
0

重学C++ ,重构你的C++知识体系

一部大片,一段历史,构建C++知识框架的同时重塑你的编程思维

3992 学习 · 1110 问题

查看课程