我是OOP的新手,所以我试图创建一个实现继承的程序。我接受派生类中宽度和高度的值。有没有办法在超类中反映相同的值,即矩形另外,如果我在RectangleArea的Input()中输入3和4作为广度和高度,那么它应该在Rectangle类的Display()中显示相同的值。
#include <iostream>
using namespace std;
class Rectangle
{
public:
int width;
int height;
public:
void Display()
{
cout<<"Height"<<height<<",Width"<<width<<endl;
}
};
class RectangleArea : public Rectangle
{
public:
void Input()
{
cin>>width;
cout<<" ";
cin>>height;
}
void Display(int area)
{
cout<<"Area"<<area;
}
};
int main()
{
Rectangle rect;
RectangleArea rect1;
rect1.Input();
rect.Display();
return 0;
}
答案 0 :(得分:2)
您已在更改Rectangle
课程中的变量。但是你有两个实例,一个(rect
)派生自Rectangle
,一个(rect1
)来自RectangleArea
,因此rect.Display
返回未定义的值 - { {1}}方法尚未被调用。
答案 1 :(得分:1)
没有必要反映&#34;超类中的值相同,因为height
和width
是超类的成员,而不是子类。我想你想要做的是从子类中删除Display
函数,让超类处理打印。
所以,您需要以下代码:
#include <iostream>
using namespace std;
class Rectangle
{
public:
int width;
int height;
public:
void Display()
{
cout<<"Height"<<height<<",Width"<<width<<endl;
}
};
class RectangleArea : public Rectangle
{
public:
void Input()
{
cin>>width;
cout<<" ";
cin>>height;
}
};
int main()
{
RectangleArea rect1;
rect1.Input();
rect1.Display();
return 0;
}
答案 2 :(得分:0)
我不太明白你在哪里,并且正在改变矩形超类的宽度和高度。关于你的代码我会改变的是将Display方法从基类中删除到你的超类中,所以它看起来像这样:
#include <iostream>
using namespace std;
class Rectangle
{
public:
int width;
int height;
public:
void DisplayHeightAndWidth()
{
cout<<"Height"<<height<<",Width"<<width<<endl;
}
void DisplayArea()
{
cout << "Area" << (height*width) << endl;
}
};
class RectangleArea : public Rectangle
{
public:
void Input()
{
cin>>width;
cout<<" ";
cin>>height;
}
void Display(int area)
{
cout<<"Area"<<area;
}
};
int main()
{
Rectangle rect;
RectangleArea rect1;
rect1.Input();
rect.Display();
return 0;
}
但是我认为将你的类称为矩形区域是没有意义的,因为它永远不会对矩形区域做任何事情,它只会输入它。
继承的东西是,无论何时从某个东西继承,您现在都可以访问该类中的所有公共实体和受保护实体(所有权类型)。因此,任何RectangleArea对象都可以对允许在Rectangle中完成的高度或宽度执行任何操作。
答案 3 :(得分:0)
我不认为你在继承方面有正确的想法,这就是为什么这个问题感觉有点奇怪。当你想到OOP和课程时,你正试图“分类”事物。例如,您可以创建一类车辆。如果我们考虑车辆,我们知道这类物体应该具有速度 - 因为它们将你从一个地方带到另一个地方。子类可以是不同类别的对象,但仍然是车辆的对象。例如,汽车是车辆,它们将具有速度,加上它们自己独特的成员变量,例如车轮数量,或每加仑英里数等等。所有汽车应具有的某些属性。
所以,在OOP中很难想象你设置的方式,因为矩形区域不是......一个矩形!一些有意义的东西是一类闭合形状,然后该类的一个成员可能是Area,因为所有封闭的数字都有限区域。那么封闭数字的子类可以是矩形。像Mark B一样,我建议你选择一个好的C ++文本。
class ClosedFigure {
private:
unsigned int area;
public:
void displayArea() { cout << area << endl;};
};
class Rectangle : public ClosedFigure {
private:
// already gets area from ClosedFigure
unsigned int length;
unsigned int width;
public:
void getDimensions() {
cin >> length >> width;
area = length * width
}
};
ClosedFigure a;
Rectangle b;
b.getDimensions();
// User inputs say 3 and 4
b.displayArea();
// program outputs 12