C++ 公有继承变私有继承

C++ 公有继承变私有继承,第1张

代码已修改完毕(原来你这是多个文件的代码呀!)。调试通过,其中有一些问题,请看下面代码中的注释:

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的理解应该就差不多了,呵呵,加油吧。

公有:该变量(或函数)在陆梁程序内外都可以访问,直接使(调)用

私有:一般用在类内,某一类的私有变量/成员,仅该类内的成员函数或友元函数可以访问.

友元:一般是用在函数前,如果某个函数或某个"动作"不属于某类,但又想要访问某类内私有变量之类的,可以定义友元.比如定义复数类时,复数的 实部/虚部属于私有成员,返回该复数的实部或虚部的那个函数应该公有,但复数的加减乘除运算,即运算符号功能应该定义为友元-----不专属于该类,但又要实现访问该类的成员.

通俗点打个比喻:国家内部事务属于私有,但外交部发言属公有----负责把内部事务通报出去.友明悄元可以理早槐运解为友好国家,不用通过外交部,可以直接收到内部事务的情况资料.

纯属个人浅见,请勿见笑


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12343126.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存