派生类会影响到基类吗?

zjfhgdx 2008-10-15 08:53:48
《C++大学教程》里的一句话

派生类可以影响PRIVATE基类成员的状态改变,但是只能通过类中提供的继承到派生类中的非PRIVATE成员函数

派生类可以影响基类?

派生类可以影响PRIVATE基类成员的状态改变。这句具体什么意思啊?

他的意思是不是说只能通过调用非PRIVATE的成员函数来间接的使用PRIVATE的成员?
...全文
230 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
jackzhhuang 2008-10-17
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 dfkjsdhfks 的回复:]
天啊,楼上在干什么,我们如果都用private修饰,我们岂不要忙得不得了了,而且它还在一定的程度上中继了类的继承与派生啊,我宁愿不用private;
[/Quote]

如果用protected修饰成员数据,而且类很大,继承引起的耦合性就会很强,代码跟踪也很头疼(由于子类父类数据直接交互而没有堆栈可看),多调用些函数虽然写起来麻烦,但是要是修改、调试起来真的很方便。
我基本上不用protected
个人见解而已。
jackzhhuang 2008-10-16
  • 打赏
  • 举报
回复
私有继承相当于把基类当做派生类的成员,你只能通过基类的public接口与基类交互,我觉得这说不上什么影响不影响。

保护继承和公有继承却可以随意访问基类非private成员变量,应该避免这种情况,尽管MFC里面常用这招,但这可是缺点。

总之,基类和派生类最好只通过公有接口交互是最好的(可以大大降低继承带来的耦合度),所以最好使用private修饰基类成员变量。
jackzhhuang 2008-10-16
  • 打赏
  • 举报
回复
晕倒,从面向对象的封装角度来说,派生类绝对不能影响基类。

派生类要是影响了基类,那就是乱套了。

所以少用继承,少用protected,少用友元。
Big鹏 2008-10-16
  • 打赏
  • 举报
回复

当然可以影响基类的私有成员啦!一点问题都没有!!
“但是只能通过类中提供的继承到派生类中的非PRIVATE成员函数 ”
也就是:子类中继承父类中的成员函数(public or protected),然后,在父类自身的成员函数里修改自身的私有成员。
chenzhp 2008-10-16
  • 打赏
  • 举报
回复
派生类访问到基类的protected成员,有可能将其改变
Dan_M 2008-10-16
  • 打赏
  • 举报
回复
应该不会吧
once_and_again 2008-10-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 boys2002 的回复:]
在类外 private 数据成员 必须通过 public 成员函数获取或设置


但是友元 可以直接访问到!!!!!!!!!!!咯!!!!!!


派生类可以影响基类?

这个我个人认为:

1:基类修改可以影响派生类 2:派生类修改不会影响基类 3:父类改后,子类不一定会更新,最好是重新刷新。


闪人先~~~~~~~~~~


[/Quote]学习了
yndfcd 2008-10-16
  • 打赏
  • 举报
回复
那个应该是翻译的问题.那个句子都不通顺.

派生类当然可以影响基类.

他那句话的意思应该是派生类可以通过基类提供的接口修改基类的成员.
dfkjsdhfks 2008-10-16
  • 打赏
  • 举报
回复
天啊,楼上在干什么,我们如果都用private修饰,我们岂不要忙得不得了了,而且它还在一定的程度上中继了类的继承与派生啊,我宁愿不用private;
creamyjung 2008-10-15
  • 打赏
  • 举报
回复
“派生类可以影响PRIVATE基类成员的状态改变”是指派生类中的成员可以调用基类中提供的public或者protected成员来间接的访问基类中的私有成员。
比如下面的例子中B中的函数setdata可以改变A中的private成员data:
#include <iostream.h>

class A
{
public:
A(){data=0;}
protected:
void setdata(int x){data=x;}
int getdata(){return data;}
private:
int data;
};

class B:private A
{
public:
void setdata(int x){A::setdata(x);}
int getdata(){return A::getdata();}
};

void main()
{
B b;
b.setdata(1);
cout<<b.getdata()<<endl;
}
boys2002 2008-10-15
  • 打赏
  • 举报
回复
在类外 private 数据成员 必须通过 public 成员函数获取或设置


但是友元 可以直接访问到!!!!!!!!!!!咯!!!!!!



派生类可以影响基类?

这个我个人认为:

1:基类修改可以影响派生类 2:派生类修改不会影响基类 3:父类改后,子类不一定会更新,最好是重新刷新。


闪人先~~~~~~~~~~

jintianfree 2008-10-15
  • 打赏
  • 举报
回复
在类外 private 数据成员 必须通过 public 成员函数获取或设置 友员除外

在继承中还会有protected 的情况

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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