C++ 继承性 多态性 整理

本文详细介绍了C++中的继承性,包括访问控制、虚继承、虚函数、纯虚函数和多态性。讨论了不同继承方式对基类成员的影响,以及虚函数和析构函数的使用。同时,探讨了抽象类的概念和多态性的实现原理,强调了派生类对基类成员的访问规则以及构造和析构函数的调用顺序。

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

一、继承性

  • 访问控制
    1. public  公有继承 。基类中public 对应 派生类的public ,基类中protected对应 派生类的protected
    2. protected 保护继承。基类中public 和 protected 变为派生类的protected
    3. private 私有继承。基类中public 和 protected 变为派生类的private。
    4. PS::任何继承方式都不能直接访问基类的private成员。
    5. PS::省略访问描述符 默认为私有继承。

代码格式:

class A{
    
}

class C{

}

class B:public A{

}//单继承

class D:public A,public C{

}//多继承
  • 虚继承
class A{
    
}

class C{

}

class B:virtual public A{

}//虚继承

二、虚函数

1.注意事项

  • 基类使用virtual 声明了函数,派生类最好也声明(可以不声明,但是为以后着想) ,派生类一直保持虚特性
  • 必须为成员函数。不能使用全局函数,静态成员函数作为虚函数(因为虚函数要依靠this指针实现)
  • 因此友元函数也不能作为虚函数,但是虚函数可以为另一个类的友元。
  • 析构函数可以是虚函数(最好这样干),构造函数就不行了

2.重载特性

  • 函数名,返回类型(不同,错误重载),参数个数、类型和顺序完全相同(不同,丢失虚特性)

三、纯虚函数

1.概念。在基类中没有实现定义,要求派生类必须定义自己的版本

形式如下:

virtual 类型 函数名(参数表)=0;

2.抽象类

抽象类至少具有一个纯虚函数。其派生类成为具体类。

抽象类只能作为基类;自身不能建立对象(实例);不能用做参数类型、函数返回型或者显式类型转换。

但是说明抽象类的指针或者引用。

四、多态性

多态(Polymorphism)按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。引用Charlie Calverts对多态的描述——多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。其实我看到过一句话:调用同名函数却会因上下文的不同而有不同的实现。我觉得这样更加贴切,还加入了多态三要素:(1)相同函数名  (2)依据上下文  (3)实现却不同  引用于https://www.cnblogs.com/dormant/p/5223215.html

 

随笔笔记:

基类的私有数据成员不能在派生类中直接访问,但派生类对象建立私有数据空间

     

 

多继承的派生类构造和访问

Ø 多个基类的派生类构造函数可以用初始式调用基类构造函数初始化数据成员。

Ø执行顺序与单继承构造函数情况类似。多个直接基类构造函数执行顺序取决于定义派生类时指定的各个继承基类的顺序。

Ø 一个派生类对象拥有多个直接或间接基类的成员。不同名成员访问不会出现二义性。如果不同的基类有同名成员,派生类对象访问时应该加以识别。

 

Ø 继承是面向对象程序设计实现软件重用的重要方法。程序员可以在已有基类的基础上定义新的派生类。

Ø 单继承的派生类只有一个基类。多继承的派生类有多个基类。

Ø 派生类对基类成员的访问由继承方式和成员性质决定。

Ø 创建派生类对象时,先调用基类构造函数初始化派生类中的基类成员。调用析构函数的次序和调用构造函数的次序相反。

Ø C++提供虚继承机制,防止类继承关系中成员访问的二义性。

 多继承提供了软件重用的强大功能,也增加了程序的复杂性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值