这个类这样写为什么会有问题

aa12983 2006-02-25 07:07:27
这个类这样写为什么会有问题,正确的要怎么写


#include<iostream>
using namespace std;
class rectangle
{private:
double chang;
double kuan;
public:
rectangle(double x,double y)
{
chang=x;
kuan=y;
}

double zhouchang()
{
double z;
z=(chang+kuan)*2;
return z;
}
double mianji()
{
double z;
z=chang*kuan;
return z;
}
};
class zheng:public rectangle
{
public:

/*void panduan()
{if(chang==kuan)
cout<<"是正方形"<<endl;
else
cout<<"不是正方形"<<endl;
}*/
void jisuan()
{
cout<<zhouchang()<<endl<<mianji()<<endl;
}
};
int main()
{
rectangle a1(5,5);
zheng a2;
a2.jisuan();

return 0;
}
...全文
125 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
0黄瓜0 2006-02-26
  • 打赏
  • 举报
回复
//这们如何:
#include<iostream>
using namespace std;
class rectangle
{
protected:
double chang;
double kuan;
public:
rectangle()
{
chang=0;
kuan=0;
}
rectangle(double x,double y)
{
chang=x;
kuan=y;
}

double zhouchang()
{
double z;
z=(chang+kuan)*2;
return z;
}
double mianji()
{
double z;
z=chang*kuan;
return z;
}
};
class zheng:public rectangle
{
public:
zheng(const double bian):rectangle(bian,bian)
{

}
void jisuan()
{
cout<<"\n这个正方形的边长为:"<<chang<<endl
<<"\n 周长为:"<<zhouchang()<<endl
<<"\n 面积为:"<<mianji()<<endl;
}
};
int main()
{
rectangle rec(5,9);
cout<<"\n这个长方形的周长为:"<<rec.zhouchang()
<<"\n 面积为:"<<rec.mianji()<<endl<<endl;;
zheng a2(6);
a2.jisuan();
return 0;
}
fan3000 2006-02-26
  • 打赏
  • 举报
回复
派生类成员函数是无法访问基类的私有数据成员的。
你可以把基类的私有改成受保护(protected)的就可以了
aniude 2006-02-26
  • 打赏
  • 举报
回复
在class zheng里面要初始化rectangle
aniude 2006-02-26
  • 打赏
  • 举报
回复
class rectangle
{
public:
rectangle(int x,int y){
change=x;
kuan=y;
}
int zhouchange(){
int z;
z=int((change+kuan)*2);
return z;
}
int mianji(){
int z;
z=int(change*kuan);
return z;
}
private:
double change;
double kuan;

};
class zheng:public rectangle
{
public:
zheng(int x,int y):rectangle(x,y){}
void jisuan(){
cout<<"周长为"<<zhouchange()<<endl<<mianji()<<endl;
}
};
antter 2006-02-25
  • 打赏
  • 举报
回复
healer_kx(甘草加油!!!)
从实践的角度来讲,正方形不该从矩形派生。浪费。
--------------------------

不敢苟同.



改成这样.
// alert.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<iostream>
using namespace std;
class rectangle
{private:
double chang;
double kuan;
public:
rectangle(){}
rectangle(int x,int y)
{
chang=x;
kuan=y;
}

int zhouchang()
{
int z;
z=(chang+kuan)*2;
return z;
}
int mianji()
{
int z;
z=chang*kuan;
return z;
}
};
class zheng:public rectangle
{
public:
zheng(){}

zheng(const rectangle& ob):rectangle(ob) {
}
/*void panduan()
{if(chang==kuan)
cout<<"是正方形"<<endl;
else
cout<<"不是正方形"<<endl;
}*/
void jisuan()
{
cout<<"周长为"<<zhouchang()<<endl<<mianji()<<endl;
}
};
int main()
{
rectangle a1(5,5);
zheng a2(a1);
a2.jisuan();

return 0;
}
aa12983 2006-02-25
  • 打赏
  • 举报
回复
改了一下,但结果不对啊,都是为0,哪位大哥能帮我找一下
,这是为什么



#include<iostream>
using namespace std;
class rectangle
{private:
double chang;
double kuan;
public:
rectangle(){}
rectangle(int x,int y)
{
chang=x;
kuan=y;
}

int zhouchang()
{
int z;
z=(chang+kuan)*2;
return z;
}
int mianji()
{
int z;
z=chang*kuan;
return z;
}
};
class zheng:public rectangle
{
public:
zheng(){}
/*void panduan()
{if(chang==kuan)
cout<<"是正方形"<<endl;
else
cout<<"不是正方形"<<endl;
}*/
void jisuan()
{
cout<<"周长为"<<zhouchang()<<endl<<mianji()<<endl;
}
};
int main()
{
rectangle a1(5,5);
zheng a2;
a2.jisuan();

return 0;
}
rabbit729 2006-02-25
  • 打赏
  • 举报
回复
首先,派生类没有提供构造函数;其次,基类没有提供默认构造函数。在使用语句zheng a2;时,首先创建基类对象,由于没有提供任何参数,所以将调用基类的默认构造函数,而在程序中并没有提供基类的默认构造函数,因此就会出错。
lyskyly 2006-02-25
  • 打赏
  • 举报
回复
定义了一个rectangle的constructor,当实例化一个rectangle对象时就不会调用
default constructor,
zheng a2; a2初始化时就不会掉用基类的default constructor,导致a2的初始化无发完成
healer_kx 2006-02-25
  • 打赏
  • 举报
回复
椭圆有两个焦点,圆有一个圆心,。当椭圆的两个焦点重合的时候就是圆了。。。
但是你不能这么设计类。
数学是数学,设计是设计。
healer_kx 2006-02-25
  • 打赏
  • 举报
回复
你说设计问题吧?

从实践的角度来讲,正方形不该从矩形派生。浪费。
wiie 2006-02-25
  • 打赏
  • 举报
回复
出现什么问题?

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧