c++继承总结

本文详细介绍了C++中的继承概念,包括基类和派生类的关系、不同类型的继承方式及其对成员访问的影响,同时还讲解了重名成员的问题及解决办法,并探讨了基类的初始化过程以及赋值兼容规则,最后讨论了多继承的概念和语法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

继承总结:

1、基类和派生类

继承的语法形式如下:

class 派生类名 : 基类名表

  {
      数据成员和成员函数声明

  }; 

基类名表构成:访问控制 基类名

访问控制有3类:1)、public公有继承    2)、private私有继承    3)、protected保护继承

2、访问控制

一个派生类公有继承一个基类时,基类中所有公有成员(由public定义的数据成员或成员函数)成为派生类的公有(public)成员,基类中所有保护成员(由protected定义的数据成员或成员函数)成为派生类的保护(protected)成员。

一个派生类私有继承一个基类时,基类中所有公有成员和保护成员同时成为派生类的私有(private)成员。

一个派生类保护继承一个基类时,基类中所有公有成员和保护成员同时成为派生类的保护(protected)成员。

3、重名成员 

1)、派生类生类定义了与基类同名的成员,在派生类中访问同名成员时屏蔽(hide)了基类的同名成员

2)、在派生类中使用基类的同名成员,显式地使用类名限定符:类名::成员

例:

#include<iostream>
using namespace std ;
class B
{ public:
    static void Add() { i++ ; }
    static int i;
    void out() { cout<<"static i="<<i<<endl; }
};
int B::i=0;
class D : private B
{ public:    
      void f() 
       { i=5;
         Add();
         B::i++;
         B::Add();
       }
};
int main()
{ B x;  D y;
  x.Add();
  x.out();//i=1
  y.f();
  cout<<"static i="<<B::i<<endl;//i=8
  cout<<"static i="<<x.i<<endl;//i=8
  //cout<<"static i="<<y.i<<endl;

4、基类的初始化

1)、在创建派生类对象时用指定参数调用基类的构造函数来初始化派生类继承基类的数据

2)、派生类构造函数声明:派生类构造函数(变元表):基类(变元表),数据成员1(变元表),…,数据成员n(变元表);

3)、构造函数执行顺序:基类→对象成员→派生类

例:

#include<iostream>
using namespace std;
class base
{
    public:
    int x;
    base(int i):x(i){}
};
class derived:public base
{
    int a;
    public:
    derived(int j):a(j*10),base(2)
    {
        cout<<x<<" "<<a<<endl;
    }
};
int main()
{
    derived d(1);//程序运行结果:2 10

}

5、赋值兼容规则

1)、赋值兼容规则指在程序中需要使用基类对象的任何地方,都可以用公有派生类的对象来替代。

2)、在替代之后,派生类对象就可以作为基类的对象使用,但只能使用从基类继承的成员。

3)、一个派生类对象也是一个基类对象,一个基类对象可派上用场的地方,派生类对象一样可派上用场。反之则不然。

6、多继承

1)、一个类有多个直接基类的继承关系称为多继承

2)、多继承声明语法:

class 派生类名:访问控制 基类名1,访问控制 基类名2,…,访问控制 基类名n

{

   数据成员和成员函数声明

};






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值