access private members in inheritance

2019-03-10 20:27发布

I have a class A, which have a field val declared as private. I want to declare a class B, that inherit from A and have an access to val. Is there a way to do it on C++?

I want to do it because I need to overload some functions of A, without changing A code at all.

Thanks.

5条回答
ら.Afraid
2楼-- · 2019-03-10 20:32

Well, if you have access to base class, you can declare class B as friend class. But as others explained it: because you can, it does not mean it's good idea. Use protected members, if you want derived classes to be able to access them.

查看更多
劫难
3楼-- · 2019-03-10 20:32

You need to define it as protected. Protected members are inherited to child classes but are not accessible from the outside world.

查看更多
手持菜刀,她持情操
4楼-- · 2019-03-10 20:50

Private members of a base class can only be accessed by base member functions (not derived classes). So you have no rights not even a chance to do so :)

class Base

  • public: can be accessed by anybody
  • private: can only be accessed by only base member functions (not derived classes)
  • protected: can be accessed by both base member functions and derived classes
查看更多
我欲成王,谁敢阻挡
5楼-- · 2019-03-10 20:51

Quick answer: You don't. Thats what the protected key-word is for, which you want to use if you want to grant access to subclasses but no-one else.

private means that no-one has access to those variables, not even subclasses.

If you cannot change code in A at all, maybe there is a public/protected access method for that variable. Otherwise these variables are not meant to be accessed from subclasses and only hacks can help (which I don't encourage!).

查看更多
你好瞎i
6楼-- · 2019-03-10 20:54

It is doable as describe in this Guru of the Week - GotW #76 - Uses and Abuses of Access Rights. But it's should be considered a last resort.

查看更多
登录 后发表回答