【C++】继承 ② ( 继承语法 | 三种继承 - 共有继承 / 保护继承 / 私有继承 | 继承与父类私有成员 | 子类访问父类私有成员 | 代码示例 )

落日映苍穹つ 2024-02-22 02:45 146阅读 0赞

文章目录

  • 一、继承语法
    • 1、语法说明
    • 2、三种继承 - 共有继承 / 保护继承 / 私有继承
    • 3、继承与父类私有成员
    • 4、子类访问父类私有成员
  • 二、代码示例 - 继承语法

一、继承语法


1、语法说明

继承语法 : 使用 class 关键字 定义 子类 , 在 子类后面 使用 冒号 : 与 若干父类隔开 ;

  1. class 子类名称 : 父类列表
  2. {
  3. // 子类成员
  4. };

父类列表格式 : 上述 “ 父类列表 “ 的格式如下 , 父类列表 由 若干父类组成 , 可以是 一个 , 也可以是 多个 ;

  1. 访问控制 父类名称 , 访问控制 父类名称 , ... , 访问控制 父类名称 ;

2、三种继承 - 共有继承 / 保护继承 / 私有继承

访问控制符 : 访问控制符 用于 设置 继承的方式 ;

  • public : 公有继承

    • Child 类继承了 Parent 类的所有公有和保护成员 , 访问级别不变 , 并且可以访问它们 ;
    • Child 类不能继承 Parent 类的私有成员 ;
  • protected : 保护继承

    • Child 类继承了 Parent 类的所有公有和保护成员 , 这些成员会被声明为 保护成员 , 只能在类内部 或 子类中 访问它们 ;
    • Child 类不能继承 Parent 类的私有成员 ;
  • private : 私有继承

    • Child 类继承了 Parent 类的所有公有和保护成员 , 这些成员会被声明为私有的 , 只能在类内部访问它们 ;
    • Child 类不能继承 Parent 类的私有成员 ;

3、继承与父类私有成员

C++ 的 三种继承

  • 公有继承 public
  • 保护继承 protected
  • 私有继承 private

只针对 父类 的 “ 公有成员 “ 和 “ 保护成员 “ , 这两种成员是可以被继承的 ;

父类的 “ 私有成员 “ 是无法被子类 继承 和 访问 的 ; 父类的 私有成员 只能在 父类中 , 由父类自己的成员访问 ;

除 父类 之外的任何类 , 包括子类 , 都不能访问 父类的 私有成员 , 这是为了保护 类的 封装性 和 安全性 而制定的规则 ;

4、子类访问父类私有成员

子类 不能直接访问 父类的 私有成员 ,

但是可以通过在 父类 中提供 公有 或 保护 的 成员函数 来访问这些私有成员 ;

这些成员函数可以在子类中重写或复用 , 以便让子类能够访问和操作基类的私有成员 ;

如果在 子类 中 尝试访问 父类 的 私有成员 , 会报如下错误 :

  1. Test.cpp(34,1): error C2248: Parent::privateFun”: 无法访问 private 成员(在“Parent”类中声明)
  2. Test.cpp(18): message : 参见“Parent::privateFun”的声明
  3. Test.cpp(6): message : 参见“Parent”的声明

在这里插入图片描述

二、代码示例 - 继承语法


代码示例 :

  1. #include "iostream"
  2. using namespace std;
  3. #include <iostream>
  4. class Parent {
  5. public:
  6. void publicFun() {
  7. cout << "父类公有成员" << endl;
  8. }
  9. protected:
  10. void protectedFun() {
  11. cout << "父类保护成员" << endl;
  12. }
  13. private:
  14. void privateFun() {
  15. cout << "父类私有成员" << endl;
  16. }
  17. };
  18. // 子类 公有继承 父类
  19. class Child : public Parent {
  20. public:
  21. void publicFunChild() {
  22. // 子类 可以访问 父类 的公有成员
  23. publicFun();
  24. // 子类 可以访问 父类 的保护成员
  25. protectedFun();
  26. // 任何类型的继承 都不能访问 父类的私有成员
  27. //privateFun();
  28. }
  29. };
  30. int main() {
  31. Child c;
  32. c.publicFunChild();
  33. // 控制台暂停 , 按任意键继续向后执行
  34. system("pause");
  35. return 0;
  36. }

执行结果 :

  1. 父类公有成员
  2. 父类保护成员
  3. Press any key to continue . . .

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,146人围观)

还没有评论,来说两句吧...

相关阅读