读书人

看不懂书上的事例特来问问

发布时间: 2013-10-22 16:16:51 作者: rapoo

看不懂书上的例子,特来问问
//文件名:Points.cpp
//功能:演示继承的思想
//
#include<iostream.h>
class twoD
{
protected:
double x,y;
public:
twoD(double i,double j):x(i),y(j){}
void setX(double NewX){x=NewX;}
void setY(double NewY){y=NewY;}

double getX() const { return x;}
double getY() const {return y;}
};
class threeD:public twoD
{
private:
double z;
public:
//内联的构造函数
//基类的构造函数不被继承
//threeD类的构造函数复用了twoD类的构造函数,并通过
//成员初始化表将值传送到twoD的构造函数
threeD(double i,double j,double k):twoD(i,j){z=k;}
void setZ(double NewZ){z=NewZ;}
double getZ(){return z;}
};

void main()
{
twoD Obj2(1,1);
threeD Obj3(1,2,3);
cout<<"Coordinates for 2d object is:"<<endl;
cout<<Obj2.getX()<<","<<Obj2.getY()<<","<<endl;
cout<<"Coordinates for 3d object is:"<<endl;
cout<<Obj3.getX()<<","<<Obj3.getY()<<","<<Obj3.getZ()<<endl;
}


这个例子去掉void setX(double NewX){x=NewX}
void setY(double NewY){y=NewY}
void setZ(double NewZ){z=NewZ}照样能运行,请问这几句是做什么用的 类
[解决办法]
你问的那几句语句的功能是修改私有成员x,y,z的值得接口,通过调用就可以修改他们的值了。
你删除了这几句的话,还能运行是因为你没有试图去修改他们的值,但是当你想修改他们的值得时候你就得思考该如何修改了。既然你看到书上有这样的例子,相信书里也有介绍类的数据成员和成员函数的内容。
你在main函数里通过调用setX()便可修改x的值。
但是你不可以直接访问私有数据成员x(例如你写Obj2.x = 1; 将会报错), 因为你在类的声明里x是private的。而如果你把private改成public便可以直接访问了。
[解决办法]
你可以试一下在cout语句前加一句:
Obj2.setX(3)
Obj3.setZ(5)
再看看输出结果。

读书人网 >C++

热点推荐