C++的中的继承
最近还有人问关于C++的继承权限问题,出一篇博客说一下, 在C++中,成员变量和函数的访问控制主要通过访问权限修饰符(public
, protected
, private
)来实现;继承方式(public
, protected
, private
)决定了派生类如何继承基类的成员,以及对外部访问的影响。以下是详细解释:
1. 成员访问权限修饰符
在一个类中,成员变量或成员函数的访问权限有以下三种:
-
public
(公共):- 可以在类的内部和外部访问。
- 通常用于提供接口(函数)或暴露必须访问的成员变量。
class Example { public: int x; // 公共成员 void show(); // 公共函数 };
-
protected
(保护):- 只能在类的内部、派生类中访问。
- 不能被类外部直接访问。
class Example { protected: int x; // 保护成员 void show(); // 保护函数 };
-
private
(私有):- 只能在类的内部访问。
- 类外部或派生类中均无法直接访问。
class Example { private: int x; // 私有成员 void show(); // 私有函数 };
修饰符 | 类内访问 | 派生类访问 | 外部访问 |
---|---|---|---|
public | ✔️ | ✔️ | ✔️ |
protected | ✔️ | ✔️ | ❌ |
private | ✔️ | ❌ | ❌ |
2. 继承方式对访问权限的影响
在继承时,可以通过public
、protected
或private
来定义继承方式,它们会影响基类成员在派生类中的访问权限。
public
继承:
基类的访问权限在派生类中保持不变:
- 基类的
public
成员仍为public
。 - 基类的
protected
成员仍为protected
。 - 基类的
private
成员不可访问。
class Base {
public:
int a;
protected:
int b;
private:
int c;
};
class Derived : public Base {
// a (public)
// b (protected)
// c 不可访问
};
protected
继承:
- 基类的
public
成员变为protected
。 - 基类的
protected
成员仍为protected
。 - 基类的
private
成员不可访问。
class Derived : protected Base {
// a (protected)
// b (protected)
// c 不可访问
};
private
继承:
- 基类的
public
和protected
成员都变为private
。 - 基类的
private
成员不可访问。
class Derived : private Base {
// a (private)
// b (private)
// c 不可访问
};
继承方式 | 基类的public 成员 | 基类的protected 成员 | 基类的private 成员 |
---|---|---|---|
public | public | protected | 不可访问 |
protected | protected | protected | 不可访问 |
private | private | private | 不可访问 |
3. 总结
- 成员访问权限修饰符:
控制类内、派生类和外部对成员的访问权限。 - 继承方式:
决定基类的访问权限如何在派生类中呈现。 - 注意点:
- 无论继承方式如何,基类的
private
成员永远不会直接出现在派生类中。 - 可以通过基类的
public
或protected
接口间接访问private
成员。
- 无论继承方式如何,基类的
希望以上内容能帮助你理解C++中访问权限和继承的区别与关系!如果需要具体代码示例,可以告诉我。