首页 > 代码库 > 【C++第九课】---惊艳的继承
【C++第九课】---惊艳的继承
一、继承的概念
1.面向对象中的继承指类之间的父子关系
2.子类拥有父类的所有成员变量和成员函数
3.子类就是一种特殊的父类
4.子类对象可以当作父类对象使用
5.子类可以拥有父类没有的方法和属性
继承小实例:
#include <iostream> #include <stdio.h> using namespace std; class Parent { private: int i; public: Parent() { i= 100; } }; class Child:Parent /* Child 继承 Parent */ { }; int main(int argc, char **argv) { ChildC; return0; }
6.C++中的访问级别与继承
继承时的访问级别设定会影响到成员的访问级别
class Child:Parent /* Child 继承 Parent */ { }; =======> class Child:private Parent /* Child 继承 Parent */ { };
7.注意:
C++中class的继承默认为private继承
private继承的子类拥有父类的所有成员
private继承使得父类的所有成员在子类中变为private成员
8.C++中的访问级别与继承
public继承
父类成员在子类中保持原有访问级别
private继承
父类成员在子类中变为private成员
二、类成员的访问级别只有public和private是否足够?
1.类的protected成员
protected成员可以在子类中被访问,但不能在外界被访问
protected成员的访问权限介于public和private之间
举例:
#include <cstdlib> #include <iostream> #include <stdio.h> using namespace std; class Parent { protected: int i; public: Parent() { i= 100; } void print(void) { std::cout<<"i = "<<i<<std::endl; } }; class Child:public Parent { private: int j; public: void print(void) { std::cout<<"i = "<<i<<std::endl; } }; int main(int argc, char **argv) { ChildC; C.print(); getchar(); return0; }
那么,我们该如何选择使用继承方式呢?
1.类成员访问级别设置的原则
2.需要被外界访问的成员直接设置为public
3.只能在当前类中访问的成员设置为private
4.只能在当前类和子类中访问的成员设置为protected
private成员在子类中依然存在,但是却无法访问到。
继承与访问级别公式:
三、继承与访问的一个深度实例
#include <iostream> using namespace std; class A { private: int a; protected: int b; public: int c; A() { a= 1; b= 2; c= 3; } void setValue(int a, int b, int c) { this->a= a; this->b= b; this->c= c; } }; class B:private A { public: void print() { //cout<<"a= "<<a<<endl; /* a isprivate */ cout<<"b= "<<b<<endl; cout<<"c= "<<c<<endl; } }; class C:protected A { public: void print() { //cout<<"a= "<<a<<endl; /* a is private */ cout<<"b= "<<b<<endl; cout<<"c= "<<c<<endl; } }; class D:public A { public: void print() { //cout<<"a= "<<a<<endl; /* a is private */ cout<<"b= "<<b<<endl; cout<<"c= "<<c<<endl; } }; int main(int argc, char** argv) { Aaa; Bbb; Ccc; Ddd; aa.c = 100; //bb.c = 100; /* 私有继承,所有成员都成为私有*/ //cc.c = 100; /* 保护继承,不能类外引用*/ dd.c = 100; }
在上面代码中,关键需要注意的地方都已经注释了,对照着上面的那张表应该很容易理解。
六、小结:
1.继承是一种类之间的关系,子类是一种特殊的父类
2.子类通过继承可以得到父类的所有成员
3.private成员可以被子类继承但不能被子类访问
4.protected成员只能在当前类和子类中被访问
5.不同的继承方式可能改变继承成员的访问属性
【C++第九课】---惊艳的继承