初学C++,遇到一个关于类的问题,大虾指教(附程序)

zhouysh 2003-03-21 09:39:18
我最近在看c++的书,刚看到了类这一章
书中有这样一个程序,有些地方我看不太明白,程序如下:
//求2点之间距离的类Distance


#include <iostream.h>
#include <math.h>
class Point //Point类声明,表示一个点的类Point
{public:
Point(int xx=0,int yy=0){X=xx;Y=yy;}
Point (Point &p);
int GetX(){ return X;}
int GetY(){return Y;}
private:
int X,Y;
};

Point::Point(point &p)
{X=p.X;
Y=p.Y;
cout<<"Point 拷贝构造函数被调用“<<endl;
}
//类的组合
class Distance
{public:
Distance{point xp1,point xp2);
double GetDis(){return dist;}
private:
Point p1,p2;
double dist;
};
//组合类构造函数
Distance::Distance(point xp1,point xp2):p1(xp1),p2(xp2)
{cout<<"Distance构造函数被调用”<<endl;
double x=double(p1.GetX()-p2.GetX()); //为什么在p1.GetX()-p2.GetX
double y=double(p1.GetY()-p2.GetY()); //表达试前面加double???
// 好象不是强制类型转换吧?
//强制类型转换的把应该把double
//用()括起来吧,请问这里是什么
//意思啊??

dist=sqrt(x*x+y*y);
}
//主函数
void main()
{Point myp1(1,1),myp2(4,5);
Distance myd(myp1,myp2);
cout<<myd.GetDis()<<endl;
}
//其中distance类构造函数体中的语句:
//double x=double(p1.GetX()-p2.GetX()); //为什么在p1.GetX()-p2.GetX
//double y=double(p1.GetY()-p2.GetY()); //表达试前面加double???
// 好象不是强制类型转换吧?
//强制类型转换的把应该把double
//用()括起来吧,请问这里是什么
//意思啊??

我对构造函数还有些不懂的:
是不是只有构造函数才能对私有数据初始化??
比如本题中私有数据dist的值 是在 distance类的构造函数求得的
为什么要在构造函数中求私有数据dist的值呢??是不是因为dist是私有数据呢??
必须这样写? 而不能在公有函数中求私有数据dist的值??
大虾回答啊
...全文
35 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiuafa 2003-03-25
  • 打赏
  • 举报
回复
up
kicool 2003-03-25
  • 打赏
  • 举报
回复
数据成员的私有,保护和公有属性,只对该类以外的类或对象有意义.并非只有构造函数才能对私有数据初始化,但这里问题的关键不再与私有公有,而是在于初始化,通常我们在构造函数里完成数据成员的初始化.
Jinglihui 2003-03-22
  • 打赏
  • 举报
回复
成员函数可以访问所有的成员变量!
构造成函数是特殊的成员函数,特殊在:
1,它没有返回值
2,不能被继承
3,可以有缺省参数
4,不可以虚拟(析构可以)
5,不可取其地址
6,不能用常规方法调用它;
7,当定义对象时,编译器自动调用构造函数,所以对于数据的初始化一般都在构造函数中进行
Jinglihui 2003-03-22
  • 打赏
  • 举报
回复
(double)变量:是旧式C的类型转换!
double(变量):是旧式C++的类型转换!

新标准显示转换用static_cast<Type>
dynamic_cast<Type>
const_cast<Type>
reinterpret_cast<Type>
每个具体怎么用,自己去查!
建议:既然是新学,买一本新近出版的书来学!不要用老书了
greening 2003-03-22
  • 打赏
  • 举报
回复
为什么不是强制类型转换?
p1.GetX()-p2.GetX()和 p1.GetY()-p2.GetY()都是int类型,而x和y都是double,所以当然要转换了。
另外,在c中,只可以支持像(double)x;这种情况;但是在c++中,除了这种以外,还支持double(x);这种情况,而且还推荐后一种。
至于关于private,public之类的东西,我觉得我给你说,不如你自己仔细看书可能理解得更好。任何一本c++的教材都有讲解的。
构造函数的天生使命就是在创建对象的时候用于初始化。

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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