在C++中,派生类对基类成员的访问权限取决于基类成员的访问控制符(public、protected、private)以及继承方式(public继承、protected继承、private继承)。以下是具体规则:
基类成员访问控制符
1. Public成员:派生类可以访问。
2. Protected成员:派生类可以访问。
3. Private成员:派生类不能直接访问。
继承方式
1. Public继承:基类的public成员在派生类中仍然是public,基类的protected成员在派生类中仍然是protected。
2. Protected继承:基类的public成员和protected成员在派生类中都变成protected成员。
3. Private继承:基类的public成员和protected成员在派生类中都变成private成员。
详细情况
假设有一个基类`Base`和一个派生类`Derived`:
```cpp
class Base {
public:
int publicMember;
protected:
int protectedMember;
private:
int privateMember;
};
class Derived : public Base { // public继承
// 派生类中publicMember仍然是public
// 派生类中protectedMember仍然是protected
// 派生类不能直接访问privateMember
};
class DerivedProtected : protected Base { // protected继承
// 派生类中publicMember变成protected
// 派生类中protectedMember仍然是protected
// 派生类不能直接访问privateMember
};
class DerivedPrivate : private Base { // private继承
// 派生类中publicMember变成private
// 派生类中protectedMember变成private
// 派生类不能直接访问privateMember
};
```
总结
1. Public继承:
- 派生类可以访问基类的public和protected成员。
- 基类的public成员在派生类中仍然是public。
- 基类的protected成员在派生类中仍然是protected。
2. Protected继承:
- 派生类可以访问基类的public和protected成员。
- 基类的public成员在派生类中变成protected。
- 基类的protected成员在派生类中仍然是protected。
3. Private继承:
- 派生类可以访问基类的public和protected成员。
- 基类的public成员在派生类中变成private。
- 基类的protected成员在派生类中变成private。
无论哪种继承方式,派生类都不能直接访问基类的private成员。