访问继承中的私有成员

ofe*_*er 26 c++ inheritance private

我有一个A类,它有一个声明为私有的字段val.我想声明一个B类,它继承自A并具有对val的访问权限.有没有办法在C++上做到这一点?

我想这样做是因为我需要重载A的一些函数,而根本不需要更改A代码.

谢谢.

Con*_*ius 45

快速回答:你没有.这就是protected关键词的用途,如果你想授予对子类的访问权限,你想要使用它,而不是其他人.

private 意味着没有人可以访问这些变量,甚至不能访问子类.

如果您根本无法更改代码A,则可能存在该变量的public/ protectedaccess方法.否则这些变量不能从子类访问,只有黑客可以帮助(我不鼓励!).


小智 16

基类的私有成员只能由基本成员函数(不是派生类)访问.所以你没有权利甚至没有机会这样做:)

class Base

  • public:任何人都可以访问
  • private:只能由基本成员函数(不是派生类)访问
  • protected:可以由基本成员函数和派生类访问


dbr*_*nk0 8

好吧,如果你有权访问基类,你可以将类B声明为友元类.但正如其他人所解释的那样:因为你可以,这并不意味着它是个好主意.如果希望派生类能够访问受保护的成员,请使用受保护的成员.

  • 事实上,我很惊讶这并没有被评为更高,因为它做了两件事:1)给出了正确的答案(这里的大多数答案基本上都说这是不可能的,可能是因为“friend”类没有得到广泛使用,所以它们只是不知道这个功能和/或因为它们来自没有类似功能的语言)并且2)提到这不是一个好主意。更好的答案是说为什么这当然不是一个好主意。:) (2认同)

Eoi*_*oin 5

正如本周大师 - GotW #76 - 使用和滥用访问权中所述,这是可行的。但这应该被视为最后的手段。