我是第一学期的计算机科学专业学生,在这个问题上遇到了麻烦。
编写一个名为Rectangle的类,其长度和宽度包含双字段,为两个字段设置方法,构造函数接受两个双参数并将它们传递给set方法。它应该包括一个方法,称为矩形区域和周边区域以及矩形的周长。
编写一个名为Square的类,它继承自Rectangle。它应该有一个构造函数,它接受一个double参数并将它传递给两个参数的基类构造函数(构造函数的主体将为空)。 Square还需要覆盖其基类的setLength()和setWidth()函数,这样如果其任一维度设置为新值,则其两个维度都将设置为该新值(以便它保持不变一个正方形)。提示:您可以让被覆盖的版本调用基类中的版本。
我使用Code :: Blocks和C ++作为语言。
Rectangle.hpp
#include <iostream>
using namespace std;
#include <cmath>
#ifndef Rectangle_HPP
#define Rectangle_HPP
class Rectangle
{
protected:
double length;
double width;
public:
Rectangle();
Rectangle(double,double);
double area();
double perimeter();
void setLength(double);
void setWidth(double);
};
#endif
Rectangle.cpp
#include <iostream>
using namespace std;
#include <cmath>
#include "Rectangle.hpp"
Rectangle::Rectangle(double l, double w)
{
length = l;
width = w;
}
double Rectangle::area()
{
return (width * length);
}
double Rectangle::perimeter()
{
return (2*(width + length));
}
void Rectangle::setLength(double l)
{
length = l;
}
void Rectangle::setWidth(double w)
{
width = w;
}
Square.hpp
#include <iostream>
using namespace std;
#include <cmath>
#include "Rectangle.hpp"
#ifndef Square_HPP
#define Square_HPP
class Square: public Rectangle
{
public:
Square();
Square(double);
void setLength(double);
void setWidth(double);
};
#endif
Square.cpp
#include <iostream>
using namespace std;
#include <cmath>
#include "Rectangle.hpp"
#include "Square.hpp"
Square::Square(double side){}
void Square::setLength(double side)
{
length = side;
width = side;
}
void Square::setWidth(double side)
{
length = side;
width = side;
}
int main()
{
return 1;
}
我已经使用main方法测试了Rectangle.hpp和Rectangle.cpp,它们似乎工作正常,但是我遇到了Square.hpp和Square.cpp的问题。有没有看到我明显遗失的东西。对Rectangle :: Rectangle的未定义引用是Code :: Blocks到目前为止唯一返回给我的错误。它说错误在Square.cpp文件中。我确保所有四个文件都是同一个项目的一部分,所以这不应该是问题。
答案 0 :(得分:0)
&#34;对Rectangle :: Rectangle的未定义引用是唯一的错误&#34;
你真的应该认真对待链接器告诉你的事情。
在rectangle.h中,您已经定义了一个默认构造函数
Rectangle();
但是你没有实现它!所以链接器抱怨。
写下这样的东西:
Rectangle::Rectangle()
: length( 0 )
, width( 0 )
{}
答案 1 :(得分:0)
不应声明Rectangle :: Rectangle()无参数构造函数(在我对规范的解释中)。
没有参数的Square :: Square()不应该被定义(在我对规范的解释中)。
Square :: Square(double)构造函数不应该调用基类的默认构造函数(您的代码当前所使用的构造函数)。相反,要求要求
Square :: Square(双倍长度):矩形(长度,长度){}
希望有所帮助。