代码已修改完毕(原来你这是多个文件的代码呀!)。调试通过,其中有一些问题,请看下面代码中的注释:
class Point{
public:
void initPoint(float x,float y)
void move(float offX,float offY)
float getX()
float getY()
private:
float x,y
}
#include "Point.h"
void Point::initPoint(float x=0,float y=0)
{
this->x=x
this->y=y
}
void Point::move(float offX,float offY)
{
x+=offX
y+=offY
}
float Point::getX()
{
return x
}
float Point::getY()
{
橡历迟return y
}
#include "Point.h"
class Rectangle:private Point //这里将public修改为private即可。
{
public:
void initRectangle(float x,float y,float w,float h)
float getH() const
float getW() const
private:
float w,h
}
#include "Rectangle.h"
void Rectangle::initRectangle(float x,float y,float w,float h)
{
initPoint(x,y)
this->w=w
this->h=h
}
float Rectangle::getH() const
{
return h
}
float Rectangle::getW() const
{
return w
}
#include "iostream.h"
#include "math.h"
#include "Rectangle.h"
void main(void)
{
Rectangle rect
rect.initRectangle(2,3,20,10)
梁李 rect.move(3,2) //此处move()是属于基类Point的公共成员,改成私有继承后,它
//在Rectangle中的访问级别等同于Rectangle的w,h(即私有的),我们
//知道,私有烂肆成员是不能被直接访问的,故此处调用move()会报错。
cout<<"The data of rect(x,y,w,h):"<<endl
cout<<rect.getX()<<","<<rect.getY()<<","<<rect.getW()<<","<<rect.getH()<<endl //此处getX()和getY()道理同上,报错。
}
如有疑问,请继续追问!
首先,相同类的不同对象可以访问彼此的私有数据,qht9624543 的回答是错的。就语言语法定义来说,类的成员函数当然可以访问本类的所有私瞎粗有数据。如果这个类声明了友元(friend)类或友元函数,那么这些友元类和函数也可以访问其私有数据。
你可以这么理解,一个类是自己的友元,相同类的对象之间是友元关系,所以相同类的对象之间也可以访问彼此的数据。
如果说深一点,为什么要有私有数据,是为了隐藏这个类的细节,让外部不了解这个类细节的代码不去乱用相关数据而导致高耦合。而相同类显然是了解自己的细节的,所以没必要去隐藏磨悔镇私有数据。友元则相当于由程序员指明了某个代码了解这个类的细节。
学C++慢慢来,面向对象这种东西要慢慢去悟,看到一个现状,想想它的本质是什么,为什么要这样,有一天你把它们的缘由都前老搞清楚的时候你对OOP的理解应该就差不多了,呵呵,加油吧。
公有:该变量(或函数)在陆梁程序内外都可以访问,直接使(调)用私有:一般用在类内,某一类的私有变量/成员,仅该类内的成员函数或友元函数可以访问.
友元:一般是用在函数前,如果某个函数或某个"动作"不属于某类,但又想要访问某类内私有变量之类的,可以定义友元.比如定义复数类时,复数的 实部/虚部属于私有成员,返回该复数的实部或虚部的那个函数应该公有,但复数的加减乘除运算,即运算符号功能应该定义为友元-----不专属于该类,但又要实现访问该类的成员.
通俗点打个比喻:国家内部事务属于私有,但外交部发言属公有----负责把内部事务通报出去.友明悄元可以理早槐运解为友好国家,不用通过外交部,可以直接收到内部事务的情况资料.
纯属个人浅见,请勿见笑
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)