| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1022 人关注过本帖
标题:[求助]一些c++的问题
只看楼主 加入收藏
cl_zdl
Rank: 1
等 级:新手上路
威 望:1
帖 子:71
专家分:0
注 册:2006-10-11
收藏
 问题点数:0 回复次数:4 
[求助]一些c++的问题

本人由于水平有限,希望大家帮我解决一下,谢谢了!
#include <iostream>
#include<cmath>
using namespace std;
class point {
private:
int x;
int y;
public :point (int a,int b){x=a;y=b;}
int getx(){return x;}
int gety(){return y;}
point (point &m)
{x=m.x;
y=m.y;}
};
class Base
{public: virtual float area(){};
};

class triangle:public Base
{private: point A1,A2,A3;
float area;
public:triangle(point a,point b,point c):A1(a),A2(b)A3(c){}

float area(){int m1=sqrt((A1.x-A2.x)*(A1.x-A2.x)+(A1.y-A2.y)*(A1.y-A2.y));
int m2=sqrt((A1.x-A3.x)*(A1.x-A3.x)+(A1.y-A3.y)*(A1.y-A2.y));
int m3=sqrt((A2.x-A3.x)*(A2.x-A3.x)+(A2.y-A3.y)*(A2.y-A3.y));
int n=(m1+m2+m3)/2;
cout<<"Èý½ÇÐεÄÃæ»ýÊÇ:"<<endl;
return area=sqrt(n*(n-m1)*(n-m2)*(n-m3));

}
};
class rectangle:public Base
{private: point A1,A2;
float area;
public:
rectangle(point a,point b):A1(a),A2(b){}
float area(){int a=A1.x-A2.x;
int b=A1.y-A2.y;
cout <<"¾ØÐεÄÃæ»ýÊÇ:"<<endl;
return area=a*b;
}
};
class circle :public Base
{private: int radius;
float area;
public :
circle(int n){radius=n;}
float area(){
cout <<"Ô²ÐεÄÃæ»ýÊÇ:"<<endl;
return area=3.14*radius*radius;
}
};
void main()
{int *c;
int x1,x2,x3,y1,y2,y3;
for(int i=0;i<20;i++)
{
c=int(rand*2+1);
Base a[20];
switch(c)
{case '1':

{cout<<"ÇëÊäÈëÈý¸öµãµÄ×ø±ê:"<<endl;
cin>>x1;
cin>>x2;
cin>>x3;
cin>>y1;
cin>>y2;
cin>>y3;
point m1(x1,y1),m2(x2,y2),m3(x3,y3);
triangle tr(m1,m2,m3);
a[i]=tr;
break;}
case '2':

{cout<<"ÇëÊäÈëÁ½¸öµãµÄ×ø±ê:"<<endl;
cin>>x1;
cin>>x1;
cin>>y1;
cin>>y2;
point a1(x1,y1),a2(x2,y2);
rectangle rec(a1,a2);
a[i]=rec;
break;}
case '3':
{int m;
cout<<"ÇëÊäÈë°ë¾¶:"<<endl;
cin>>m;
circle cir(m);
a[i]=cir;
break;}
}
}
for( i=0;i<20;i++)
cout <<a[i].area()<<endl;
}

错误调试:
ompiling...
3333.cpp
d:\33333\3333.cpp(24) : error C2040: 'area' : 'float (void)' differs in levels of indirection from 'float'
d:\33333\3333.cpp(38) : error C2040: 'area' : 'float (void)' differs in levels of indirection from 'float'
d:\33333\3333.cpp(49) : error C2040: 'area' : 'float (void)' differs in levels of indirection from 'float'
d:\33333\3333.cpp(59) : error C2296: '*' : illegal, left operand has type 'int (__cdecl *)(void)'
d:\33333\3333.cpp(59) : fatal error C1903: unable to recover from previous error(s); stopping compilation
Ö´ÐÐ cl.exe ʱ³ö´í.

3333.obj - 1 error(s), 0 warning(s)

搜索更多相关主题的帖子: int public class Base include 
2006-10-30 22:18
cl_zdl
Rank: 1
等 级:新手上路
威 望:1
帖 子:71
专家分:0
注 册:2006-10-11
收藏
得分:0 
乱码是一些输出提示!
2006-10-30 22:19
litcatyx
Rank: 1
等 级:新手上路
威 望:1
帖 子:151
专家分:0
注 册:2006-10-27
收藏
得分:0 
rectangle,triangle,circle中分别由数据成员area,和成员函数area,发生名字冲突。
建议数据成员和成员函数有一些特有的表示,比如MFC采取的数据成员以m_开头,成员函数第一个字母大写。
只要遵循类似的约定,这种错误发生的几率就大大减少了

2006-10-31 10:07
litcatyx
Rank: 1
等 级:新手上路
威 望:1
帖 子:151
专家分:0
注 册:2006-10-27
收藏
得分:0 
当然不一定非要采取MFC的方法,也可以用有些C++书上采取的数据成员以"_"开头的方法,像这种约定你也可以自己定,当然如果你写的程序想让别人看得话,还是采取一些比较通俗的约定

2006-10-31 10:10
litcatyx
Rank: 1
等 级:新手上路
威 望:1
帖 子:151
专家分:0
注 册:2006-10-27
收藏
得分:0 
错误不少,我改了一下,可以了,当然还有许多需要改进的地方

#include <iostream>
#include <cmath>
#include <time.h>

using namespace std;

class point
{
private:
int _x;
int _y;
public:
point (int a,int b){_x=a;_y=b;}

int x()const{return _x;}
int y()const{return _y;}
};

class Base
{
public:
virtual double area()=0;
};

class triangle:public Base
{
private:
point _p1,_p2,_p3;
double _area;
public:
triangle(const point& a,const point& b,const point& c):_p1(a),_p2(b),_p3(c){}

double area()
{
double m1=sqrt(static_cast<double>((_p1.x()-_p2.x())*(_p1.x()-_p2.x())+(_p1.y()-_p2.y())*(_p1.y()-_p2.y())));
double m2=sqrt(static_cast<double>((_p1.x()-_p3.x())*(_p1.x()-_p3.x())+(_p1.y()-_p3.y())*(_p1.y()-_p3.y())));
double m3=sqrt(static_cast<double>((_p2.x()-_p3.x())*(_p2.x()-_p3.x())+(_p2.y()-_p3.y())*(_p2.y()-_p3.y())));
double n=(m1+m2+m3)/2;
return _area=sqrt(static_cast<double>(n*(n-m1)*(n-m2)*(n-m3)));
}
};

class rectangle:public Base
{
private:
point _p1,_p2;
double _area;
public:
rectangle(const point& a,const point& b):_p1(a),_p2(b){}

double area()
{
int a=_p1.x()-_p2.x();
int b=_p1.y()-_p2.y();
return _area=a*b;
}
};

class circle :public Base
{
private:
int _radius;
double _area;

public :
circle(int n){_radius=n;}

double area()
{
return _area=3.14*_radius*_radius;
}
};

int main()
{
srand( (unsigned)time( NULL ) );//设置随即种子

const int size=20;//调试时可以减小缩短输入时间

Base* a[size];//存储各种形状对象的指针,建议改用vector

for(int i=0;i<size;++i)
{
int x1,x2,x3,y1,y2,y3;
switch(rand()%3+1)
{
case 1:
{
cout<<"请输入三角形的三个顶点横纵坐标,第一个:";
cin>>x1;
cin>>y1;
cout<<"第二个:";
cin>>x2;
cin>>y2;
cout<<"第三个:";
cin>>x3;
cin>>y3;
a[i]=new triangle(point(x1,y1),point(x2,y2),point(x3,y3));
break;
}
case 2:
{
cout<<"请输入矩形的对角顶点横纵坐标,左上角:";
cin>>x1;
cin>>y1;
cout<<"右下角:";
cin>>x2;
cin>>y2;
a[i]=new rectangle(point(x1,y1),point(x2,y2));
break;
}
case 3:
{
cout<<"请输入圆形的半径:";
cin>>x1;
a[i]=new circle(x1);
break;
}
default:
break;
}
}

cout<<"它们的面积分别是:\n";
for(int i=0;i<size;++i)
cout<<a[i]->area()<<endl;

//释放a[]的内存
for(int i=0;i<size;++i)
delete a[i];
}

2006-10-31 12:14
快速回复:[求助]一些c++的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033697 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved