gpt4 book ai didi

c++ - 工厂设计模式中的纯虚函数错误

转载 作者:行者123 更新时间:2023-11-30 01:12:26 25 4
gpt4 key购买 nike

为期末考试学习并决定构建一个使用纯虚函数和多态性的程序。我陷入了一个非常奇怪的错误,也许我遗漏了一些东西。

这是Shape抽象类

#ifndef Shape_hpp
#define Shape_hpp

#include <stdio.h>
#include <string.h>

class Shape{
const char* name;
public:
Shape(const char* abc);
virtual double getPerimeter()=0;
virtual double getArea()=0;
};

#endif /* Shape_hpp */

Shape .cpp 实现文件

#include "Shape.hpp"

Shape::Shape(const char *shape){
name = shape;
}

圆头文件

#ifndef Circle_hpp
#define Circle_hpp

#include "Shape.hpp"
#include <stdio.h>

class Circle:public Shape{
double m_radius;
public:
Circle(double rad);
double getRadius();
};

#endif /* Circle_hpp */

圆.cpp实现文件

#include "Circle.hpp"
#include "Shape.hpp"

Circle::Circle(double rad):Shape("Circle"){
m_radius = rad;
}

double Circle::getRadius(){
return m_radius;
}

double Circle::getPerimeter(){
return (2 * 3.14 * m_radius);
}

double getArea(){
return 0;
}

我在抽象的“shape”类中声明了两个纯虚函数,并在 circle 头文件中访问 shape 类的 public,如果我在 circle 类中声明纯虚函数,它将使其抽象......错误说“‘getPerimeter’的外联定义与‘Circle’中的任何声明不匹配”

我是不是遗漏了什么或者我是不是以错误的方式思考这个问题..

帮助将不胜感激。谢谢!

最佳答案

您需要声明您定义的所有成员函数。所以在 class Circle 中你需要添加:

virtual double getPerimeter();

或者在 C++11 中更好:

double getPerimeter() override;

关于c++ - 工厂设计模式中的纯虚函数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34282048/

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