打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C++继承
userphoto

2013.08.22

关注

继承(inheritance)

一个类能从另一个类里面派生(derived),这个类叫基类(base class)。

★派生类继承基类除构造函数、析构函数和赋值函数之外的所有成员。

Base(父类、基类)---->derived(子类、派生类)

derived = base part + appendant part //派生类=基类部分+附加部分;

★基类的私有成员不能被派生类访问,只能通过基类的公有成员来访问。
例:
 class A
 {
 private:
  funcA();
 public:
  funcB(){funcA();}; 
 };

 class B->A
 {

 };

 class C 
 {
 private:
  int c;
 public:
  int getC() {return c;}
  int f(int, int){cout<<c<<endl;}   //基类的函数f(int, int);
 };

 class D-->c
 {
 private:
  int d;
 public;
  int getD() {return d;}
  foo() {d=c;}     //c为基类私有成员,不可见,所以不能直接用c赋值给d;
  foo() {d=getC();}    //getC()为基类公有部分,可以用这种方法把c的值赋给d;
  int f(int, int){cout<<d<<endl;}   //派生类的f(int, int)覆盖了基类的f(int, int);
 };

 C c1; c1.f(int, int);     //输出c的值;
 D d1; d1.f(int, int);     //输出d的值;
 d1.C::f(int, int);     //输出c的值;
 
 C* pc=&c1; pc->f(int, int);   //输出c的值;
 D* pd=&d1; pd->f(int, int);   //输出c的值;
B类成员不能直接访问funcA(),只能通过funcB()来访问funcA()。

★子类可以定义一个和基类同名、同参数、同返回值的成员函数,派生类会覆盖基类函数,覆盖(overrides)是一类特殊的重载。

★由C类派生出D类,C类自身无任何变化。
例:
 C c1; c1.f(int, int);     //输出c的值;
 D d1; d1.f(int, int);     //输出d的值;

 C* pc=&c1; pc->f(int, int);   //输出c的值;
 D* pd=&d1; pd->f(int, int);   //输出c的值;

★由于子类会继承基类部分,想调用基类必须使用域作用运算符。
例:
 d1.C::f(int, int);     //输出c的值;

★继承的写法:
例:
 class Derived:public Base
 {
 };

★保护(protected):一个类的保护成员只能被他的成员函数和友元函数访问,不能被别人访问。一个类的保护部分不能被子类对象访问,只能通过成员函数访问。【在公有继承的情况下,基类的保护成员可以被子类的成员函数访问。】
例:
 class Base
 {
 private:
  int a1;
 public:
  int a2;
 protected:
  int a3;
 };

 class D:public Base
 {
 public:
  print(){
   cout<<a1<<endl;  //error;
   cout<<a2<<endl;  //ok;
   cout<<a3<<endl;  //ok;
   }
 };

 D d; d.a1 //error;
  d.a2 //ok;
  d.a3 //error;

★★★三种继承方式:

●基类成员的访问权限在子类里只能维持原样或者降低,不能提升。

①公有继承:(最常使用)派生类的基类部分权限不变;
例:
 class Derived : public Base{};
②私有继承:派生类的基类部分都是私有;
例:
 class Derived : private Base{};
③保护继承:派生类的基类部分的公有成员和保护成员为保护成员,私有部分权限不变(还是私有);
例:
 class Derived : protected Base{};

一重继承:一个父类一个子类;
多重继承:一个爷爷类,一个父类,一个子类或者更多。

▲子类中继承来的基类部分的私有不能直接被子类访问,但是通过私有继承变成私有的可以被子类访问。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
从结构struct谈到类class(基于C++实现)
C++类的内存地址存放问题(动态更新中)
4.4 多态 (Polymorphism)
子类对象如何访问父类的成员变量?
子类中using引入基类函数时需要注意的情况
C++类成员的初始化
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服