如何在C++中改变超类和子类的变量
How to change the variables of super class from subclass in C++?
我是OOP的新手,所以我试图创建一个实现继承的程序。在这里,我接受派生类中的宽度和高度值。有没有办法在超类中反映相同的值,即矩形。?即,如果iam在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;
}
您已经在更改Rectangle
类中的变量。但是您有两个实例,一个(rect
)派生自Rectangle
,另一个(rect1
)派生自RectangleArea
,因此rect.Display
返回未定义的值——其Input
方法尚未调用。
没有必要在超类中"反映"相同的值,因为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;
}
我认为您在继承方面没有正确的想法,这就是为什么这个问题感觉有点奇怪。当你想到OOP和类时,你试图对事物进行"分类"。例如,您可以创建一类车辆。如果我们考虑车辆,我们知道这类物体应该有速度——因为它们把你从一个地方带到另一个地方。子类可以是不同的对象类,但对象仍然是交通工具。例如,汽车是车辆,它们有一个速度,加上它们自己独特的成员变量,如车轮数量或每加仑英里数等。所有汽车都应该具有的一些特性。
所以,在OOP中很难思考你设置事物的方式,因为矩形区域不是。。。一个矩形!有意义的是一类闭形,然后该类的一个成员可能是面积,因为所有闭形都有有限的面积。那么闭合图形的子类可以是矩形。和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
我不太明白你在问什么,因为你已经并正在改变矩形超类的宽度和高度。我想对你的代码做的改变是将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;
}
但我想,让你的类称为矩形区域是没有意义的,因为它永远不会对矩形的区域做任何事情,它只会输入它
继承的问题是,无论何时从某个对象继承,现在都可以访问(某种所有权)该类中的所有公共和受保护实体。因此,任何矩形区域对象都可以对矩形中允许的高度或宽度进行任何操作。
- C++子类共享变量?
- 如何在C++子类中访问父类的私有变量
- 如何在C++中找到变量派生最多的子类?
- 如何访问基类向量中的子类变量?(对于实体组件系统)
- 构造添加了成员变量的子类
- 将子类实例保存在父类型变量中并通过父变量使用 Child 函数?
- 重写子类构造函数中的父类变量
- 无法使用子类变量访问超类公共成员
- 如何在 getter 的父类中初始化变量的情况下访问子类中的变量
- 尝试为所有子类 B 编辑父类 A 类的静态变量
- 有没有更好的方法可以从子类访问父类的变量?
- 如何以相同的方法在子类中超载的相同方法来实现工作变量参数方法
- C++:使用父类运算符函数更新子类对象的继承变量
- C++ 使类的成员变量成为子类中的专用化
- 隐藏子类中的变量
- 子类无法访问父类的变量
- C++ 在超类构造函数中运行依赖于子类覆盖的大量变量的代码的正确方法是什么?
- 访问受保护的变量 - 继承和子类的复杂情况
- c++基类到达子类变量
- 创建子类变量的语法