简单的c++ /OOP继承
Simple C++/OOP inheritance
我想知道这是否可能
/* C++ Program to calculate the area and perimeter of rectangles using concept of inheritance. */
#include <iostream>
using namespace std;
class Rectangle
{
protected:
float length, breadth;
public:
Rectangle(): length(0.0), breadth(0.0)
{
cout<<"Enter length: ";
cin>>length;
cout<<"Enter breadth: ";
cin>>breadth;
}
};
/* Area class is derived from base class Rectangle. */
class Area : public Rectangle
{
public:
float calc()
{
return length*breadth;
}
};
/* Perimeter class is derived from base class Rectangle. */
class Perimeter : public Rectangle
{
public:
float calc()
{
return 2*(length+breadth);
}
};
int main()
{
cout<<"Enter data for first rectangle to find area.n";
Area a;
cout<<"Area = "<<a.calc()<<" square meternn";
cout<<"Enter data for second rectangle to find perimeter.n";
Perimeter p;
cout<<"nPerimeter = "<<p.calc()<<" meter";
return 0;
}
考虑到上面的代码,是否有可能在main中调用a.c calc(),这将执行其代码,但在我们返回之前,让它从Parameter中调用calc(),而不在Area或Rectangle中创建圆周对象
谢谢!
技术上的答案是添加函数声明:
virtual float calc() = 0;
类Rectangle
将允许您在main中调用a.calc()
,但这不是继承的好情况。把"A
继承B
"想象成"A
是B
"。说"Area
是Rectangle
"或"Perimeter
是Rectangle
"是没有意义的。"Rectangle
是一个Shape
"这样说会更有意义。
在你提出的情况下,我将只是将float getArea()
和float getPerimeter()
函数添加到Rectangle
,而根本不使用继承。你说这只是一个例子,所以也许问一下你的实际的用例会得到更好的答案。
我仔细看了一下,发现a
只是一个Area
类型的变量,所以我提到的函数声明在技术上是不需要的
是否有一种方法可以从B:Foo()访问C:Foo()而无需在a或B中创建C对象?
。因为C::Foo()
是private
,所以你根本不能从B::Foo()
访问它。
始终使用"is a" vs。有一个"比较"来决定何时使用继承。
A Rectangle *has a* perimeter
因此,perimeter应该是Rectangle的成员变量(或者在这种情况下,它甚至可以只是一个函数)。
但是,对于像 这样的例子,Honda *is a* car
Honda应该继承父类car
相关文章:
- 继承函数的重载解析
- 继承期间显示未知行为的子类
- 头文件-继承c++
- 为什么在保护模式下继承升级不起作用
- 通过继承类使用来自不同命名空间的运算符
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 混合组合和继承的C++问题
- 继承:构造函数,初始化C++11中基类的类C数组成员
- 从类继承时,继承的类是否会通过父类重新定义继承的变量
- 公共与私人继承
- 如何创建从同一类继承的不同对象的向量
- 如何从另一个文件继承私有成员变量和公共函数
- 在模板基类中为继承类中的可选重写生成虚拟方法
- 我得到了一个使用 SDL 的 OOP 项目。我没有使用继承。我可以给我的评估员什么理由
- C++ OOP 体系结构:决定是从基类声明对象还是继承基类
- 简单的c++ /OOP继承
- c++ - OOP设计-多重继承和纯虚方法
- 对复制构造函数的c++ OOP程序问题?继承
- OOP设计——从泛型容器继承
- 为什么这个代码不能工作?(c++ OOP)公共继承