【发布时间】:2022-01-10 10:10:09
【问题描述】:
我正在尝试用 C++ 编写代码并且是新手。 那么,有没有办法通过在基类之前预定义基类来在基类中定义派生类
class rect:public area{
void rect();
};
class area
{
public:
int a,rl,rb,tb,th;
void getdata()
{
cout<<"1.Calculate rectangle: ";
cout<<"2.Calculate triangle: ";
cout<<"Enter your choice: ";
cin>>a;
switch (a)
{
case 1:
cout<<"Enter length";
cin>>rl;
cout<<"Enter breadth";
cin>>rb;
rect r;
break;
派生类中的代码是
class rect:public area
{
public:
rect(){
cout<<"The area of rectangle is:"<<rl*rb;
}
};
但我似乎无法预定义基类,这是 c++ 中的限制还是代码中存在问题。
【问题讨论】:
-
不,不能。另一方面,为什么矩形是从面积派生的?一个矩形不是一个区域,它可能有一个区域。这表明该模型有些缺陷,您可能需要重新考虑它。大多数情况下,基类定义了一个带有派生类可以实现的虚函数的接口。
-
@kiner_shah 不要盲目地模仿其他评论者(所以它并没有变得更好)。在这种情况下,不需要最小的可编译示例。 OP 试图创建一个循环继承依赖(从他的例子中可以清楚地看出),这样的依赖是不可能的。
-
您的 C++ 知识似乎存在一些空白,您应该在参考书中查找:forward declaration,在类定义之外定义成员函数,以及数据封装(在这种情况下:它是基类知道派生自它的特定类通常是糟糕的设计)。你想做的事情可以做,但也许你不应该做。当心恐龙!
-
嗯...我想一个问题是您将代码扔给我们并希望我们弄清楚代码的用途。当您的代码没有按照预期执行时,这将成为一个猜谜游戏。馊主意。您应该为您的代码编写规范,并将它们添加到问题中。你的每个类应该封装什么概念?
getdata()的作用是什么,为什么是area的成员?你希望通过定义一个变量然后什么都不做(rect r;)来完成什么? 让您的示例代码更简单可能会更容易编写这些规范。
标签: c++ inheritance