一、继承语法
1、语法说明
继承语法 : 使用 class 关键字 定义 子类 , 在 子类后面 使用 冒号 :
与 若干父类隔开 ;
class 子类名称 : 父类列表
{
// 子类成员
};
父类列表格式 : 上述 " 父类列表 " 的格式如下 , 父类列表 由 若干父类组成 , 可以是 一个 , 也可以是 多个 ;
代码语言:javascript复制访问控制 父类名称 , 访问控制 父类名称 , ... , 访问控制 父类名称 ;
2、三种继承 - 共有继承 / 保护继承 / 私有继承
访问控制符 : 访问控制符 用于 设置 继承的方式 ;
- public : 公有继承
- Child 类继承了 Parent 类的所有公有和保护成员 , 访问级别不变 , 并且可以访问它们 ;
- Child 类不能继承 Parent 类的私有成员 ;
- protected : 保护继承
- Child 类继承了 Parent 类的所有公有和保护成员 , 这些成员会被声明为 保护成员 , 只能在类内部 或 子类中 访问它们 ;
- Child 类不能继承 Parent 类的私有成员 ;
- private : 私有继承
- Child 类继承了 Parent 类的所有公有和保护成员 , 这些成员会被声明为私有的 , 只能在类内部访问它们 ;
- Child 类不能继承 Parent 类的私有成员 ;
3、继承与父类私有成员
C 的 三种继承
- 公有继承 public
- 保护继承 protected
- 私有继承 private
只针对 父类 的 " 公有成员 " 和 " 保护成员 " , 这两种成员是可以被继承的 ;
父类的 " 私有成员 " 是无法被子类 继承 和 访问 的 ; 父类的 私有成员 只能在 父类中 , 由父类自己的成员访问 ;
除 父类 之外的任何类 , 包括子类 , 都不能访问 父类的 私有成员 , 这是为了保护 类的 封装性 和 安全性 而制定的规则 ;
4、子类访问父类私有成员
子类 不能直接访问 父类的 私有成员 ,
但是可以通过在 父类 中提供 公有 或 保护 的 成员函数 来访问这些私有成员 ;
这些成员函数可以在子类中重写或复用 , 以便让子类能够访问和操作基类的私有成员 ;
如果在 子类 中 尝试访问 父类 的 私有成员 , 会报如下错误 :
代码语言:javascript复制Test.cpp(34,1): error C2248: “Parent::privateFun”: 无法访问 private 成员(在“Parent”类中声明)
Test.cpp(18): message : 参见“Parent::privateFun”的声明
Test.cpp(6): message : 参见“Parent”的声明
二、代码示例 - 继承语法
代码示例 :
代码语言:javascript复制#include "iostream"
using namespace std;
#include <iostream>
class Parent {
public:
void publicFun() {
cout << "父类公有成员" << endl;
}
protected:
void protectedFun() {
cout << "父类保护成员" << endl;
}
private:
void privateFun() {
cout << "父类私有成员" << endl;
}
};
// 子类 公有继承 父类
class Child : public Parent {
public:
void publicFunChild() {
// 子类 可以访问 父类 的公有成员
publicFun();
// 子类 可以访问 父类 的保护成员
protectedFun();
// 任何类型的继承 都不能访问 父类的私有成员
//privateFun();
}
};
int main() {
Child c;
c.publicFunChild();
// 控制台暂停 , 按任意键继续向后执行
system("pause");
return 0;
}
执行结果 :
代码语言:javascript复制父类公有成员
父类保护成员
Press any key to continue . . .