在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
继承是使代码可以复用的重要手段,也是面向对象程序设计的核心思想之一。简单的说,继承是指一个对象直接使用另一对象的属性和方法。继承呈现了 面向对象程序设 计的层次结构, 体现了 由简单到复杂的认知过程。C++中的继承关系就好比现实生活中的父子关系,继承一笔财产比白手起家要容易得多,原始类称为基类,继承类称为子类,它们是类似于父亲和儿子的关系,所以也分别叫父类和子类。继承的方式有三种分别为公有继承(public),保护继承(protect),私有继承(private)。 1. 公有继承(public) 公有继承的特点是基类的公有成员和保护成员作为派生类的成员时,它们都保持原有的状态,而基类的私有成员仍然是私有的,不能被这个派生类的子类所访问。 2. 私有继承(private) 私有继承的特点是基类的公有成员和保护成员都作为派生类的私有成员,并且不能被这个派生类的子类所访问。 3. 保护继承(protected) 保护继承的特点是基类的所有公有成员和保护成员都成为派生类的保护成员,并且只能被它的派生类成员函数或友元访问,基类的私有成员仍然是私有的。 private能够对外部和子类保密,即除了成员所在的类本身可以访问之外,别的都不能直接访问。protected能够对外部保密,但允许子类直接访问这些成员。public、private和protected对成员数据或成员函数的保护程度可以用下表来描述:举个栗子: 1 class Base //父类 2 { 3 private: 4 int _priB; 5 protected: 6 int _proB; 7 public: 8 int _pubB; 9 } ; 10 class Derived: public Base //子类,继承自base,继承类型为公有继承 11 { 12 private: 13 int _d_pri; 14 protected: 15 int _d_pro; 16 public: 17 void funct() 18 { 19 int d; 20 d=_priB; //error:基类中私有成员在派生类中是不可见的 21 d=_proB; //ok: 基类的保护成员在派生类中为保护成员 22 d=_pubB; //ok: 基类的公共成员在派生类中为公共成员 23 } 24 int _d_pub; 25 } ; 总结: 2. 基类的private成员 在派生类中是不能被访问的, 如果基类成员 不想在类外直接被访问, 但需要 在派生类中能访问, 就定义为protected。 可以看出保护成员 限定符是因继承才出现的。 49 int main() 50 { 51 int a; 53 D d; 54 a=D._priB; //error:公有继承基类中私有成员在派生类中是不可见的,对对象不可见 55 a=D._proB; //error:公有继承基类的保护成员在派生类中为保护成员,对对象不可见 56 a=D._pubB; //ok:公有继承基类的公共成员在派生类中为公共成员,对对象可见 58 B b; 59 a=c._priB; //error:私有继承基类中私有成员在派生类中是不可见的,对对象不可见 60 a=c._proB; //error:私有继承基类的保护成员在派生类中为私有成员,对对象不可见 61 a=c._pubB; //error:私有继承基类的公共成员在派生类中为私有成员,对对象不可见 63 C c; 64 a=e._priB; //error:保护继承基类中私有成员在派生类中是不可见的,对对象不可见 65 a=e._proB; //error:保护继承基类的保护成员在派生类中为保护成员,对对象不可见 66 a=e._pubB; //error:保护继承基类的公共成员在派生类中为保护成员,对对象不可见 67 68 return 0; 69 } 4. 不管是哪种继承方式, 在派生类内 部都可以访问基类的公有成员 和保护成员 , 基类的私有成员 存在但是在子类中不可见( 不能访问) 。 在struct继承中,如果没有显式给出继承类型,则默认的为public继承;在class继承中,如果没有显式给出继承类型,则默认的为private继承; 继承关系&访问限定符 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论