派生类会影响到基类吗?

时间:2022-08-06 19:28:12
《C++大学教程》里的一句话 

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

派生类可以影响基类?

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

他的意思是不是说只能通过调用非PRIVATE的成员函数来间接的使用PRIVATE的成员?

12 个解决方案

#1


在类外 private 数据成员 必须通过 public 成员函数获取或设置  友员除外

在继承中还会有protected 的情况

#2


在类外 private 数据成员 必须通过 public 成员函数获取或设置  


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



派生类可以影响基类?

这个我个人认为:

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


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

#3


“派生类可以影响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;
}

#4


引用 2 楼 boys2002 的回复:
在类外 private 数据成员 必须通过 public 成员函数获取或设置


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


派生类可以影响基类?

这个我个人认为:

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


闪人先~~~~~~~~~~
学习了

#5


应该不会吧

#6


 派生类访问到基类的protected成员,有可能将其改变

#7



当然可以影响基类的私有成员啦!一点问题都没有!!
“但是只能通过类中提供的继承到派生类中的非PRIVATE成员函数 ”
也就是:子类中继承父类中的成员函数(public or protected),然后,在父类自身的成员函数里修改自身的私有成员。

#8


晕倒,从面向对象的封装角度来说,派生类绝对不能影响基类。

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

所以少用继承,少用protected,少用友元。

#9


私有继承相当于把基类当做派生类的成员,你只能通过基类的public接口与基类交互,我觉得这说不上什么影响不影响。

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

总之,基类和派生类最好只通过公有接口交互是最好的(可以大大降低继承带来的耦合度),所以最好使用private修饰基类成员变量。

#10


天啊,楼上在干什么,我们如果都用private修饰,我们岂不要忙得不得了了,而且它还在一定的程度上中继了类的继承与派生啊,我宁愿不用private;

#11


那个应该是翻译的问题.那个句子都不通顺.

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

他那句话的意思应该是派生类可以通过基类提供的接口修改基类的成员.

#12


引用 10 楼 dfkjsdhfks 的回复:
天啊,楼上在干什么,我们如果都用private修饰,我们岂不要忙得不得了了,而且它还在一定的程度上中继了类的继承与派生啊,我宁愿不用private;


如果用protected修饰成员数据,而且类很大,继承引起的耦合性就会很强,代码跟踪也很头疼(由于子类父类数据直接交互而没有堆栈可看),多调用些函数虽然写起来麻烦,但是要是修改、调试起来真的很方便。
我基本上不用protected
个人见解而已。

#1


在类外 private 数据成员 必须通过 public 成员函数获取或设置  友员除外

在继承中还会有protected 的情况

#2


在类外 private 数据成员 必须通过 public 成员函数获取或设置  


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



派生类可以影响基类?

这个我个人认为:

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


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

#3


“派生类可以影响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;
}

#4


引用 2 楼 boys2002 的回复:
在类外 private 数据成员 必须通过 public 成员函数获取或设置


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


派生类可以影响基类?

这个我个人认为:

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


闪人先~~~~~~~~~~
学习了

#5


应该不会吧

#6


 派生类访问到基类的protected成员,有可能将其改变

#7



当然可以影响基类的私有成员啦!一点问题都没有!!
“但是只能通过类中提供的继承到派生类中的非PRIVATE成员函数 ”
也就是:子类中继承父类中的成员函数(public or protected),然后,在父类自身的成员函数里修改自身的私有成员。

#8


晕倒,从面向对象的封装角度来说,派生类绝对不能影响基类。

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

所以少用继承,少用protected,少用友元。

#9


私有继承相当于把基类当做派生类的成员,你只能通过基类的public接口与基类交互,我觉得这说不上什么影响不影响。

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

总之,基类和派生类最好只通过公有接口交互是最好的(可以大大降低继承带来的耦合度),所以最好使用private修饰基类成员变量。

#10


天啊,楼上在干什么,我们如果都用private修饰,我们岂不要忙得不得了了,而且它还在一定的程度上中继了类的继承与派生啊,我宁愿不用private;

#11


那个应该是翻译的问题.那个句子都不通顺.

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

他那句话的意思应该是派生类可以通过基类提供的接口修改基类的成员.

#12


引用 10 楼 dfkjsdhfks 的回复:
天啊,楼上在干什么,我们如果都用private修饰,我们岂不要忙得不得了了,而且它还在一定的程度上中继了类的继承与派生啊,我宁愿不用private;


如果用protected修饰成员数据,而且类很大,继承引起的耦合性就会很强,代码跟踪也很头疼(由于子类父类数据直接交互而没有堆栈可看),多调用些函数虽然写起来麻烦,但是要是修改、调试起来真的很方便。
我基本上不用protected
个人见解而已。