IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 【918C++程序设计】8、继承与多态 -> 正文阅读

[C++知识库]【918C++程序设计】8、继承与多态

8.1继承与派生的概念

继承:一个新类从已有的类那里获得其已有的特性,称为类的继承。

单继承:一个派生只从一个基类派生
多重继承:一个派生类有两个或多个基类

派生类(子类)是基类(父类)的具体化,而基类则是派生类的抽象。

派生类声明

形式:
class 派生类名:继承方式 基类名{
派生类型增加成员
};

继承方式不写则默认private

继承方式访问属性
公用继承基类的public和protected在派生类中保持原属性,privat仍为基类私有
私有继承基类的public和protected在派生类中成为private,privat仍为基类私有
受保护的继承基类的public和protected在派生类中成为protected,privat仍为基类私有

保护成员:不能被外界引用,但可以被派生类的成员引用

派生类的构成

1)从基类接收成员。接收基类全部的成员(除构造函数和析构函数)
2)调整从基类接收的成员:改变访问属性;重声明(如果是函数,参数必须完全相同)
3)在声明派生类时增加的成员

8.2 派生类的构造函数与析构函数

构造函数形式:
派生类构造函数名(总参数表):基类构造函数名(参数表),子对象名(参数名)
{
派生类中新增
}

class Student:public People{
	public:
		Student(int s,string na,string num,int classroom):People(s,na){}

构造函数调用顺序:
1、调用基类构造函数
2、调用子对象构造函数
2、再执行派生类构造函数本身
析构函数则相反。

8.3 多重继承与派生类的成员标识

多继承的概念

一个派生类有两个或多个基类的称为多重继承。
继承方式包括:public,private,protected(默认private)

class Student:public People{
	public:
		Student(int n,int a):People(n){
			age = a;      //对新增数据成员进行初始化 
		}
};

public:
基类的public和protected在派生类中保持原有访问属性,其private仍为基类私有。
private:
基类的public和protected在派生类中成了私有成员,其private仍为基类私有。
protected:
基类的public和protected在派生类中成了保护成员,其private仍为基类私有。

protected的意思是,不能被外界引用,但可以被派生类的成员引用。

多重继承的二义性问题如何解决

可以通过直接派生类名来指出要访问的是哪一个派生类中的基类成员。

c1.A::display();

8.4 虚基类

多继承中的虚基类的特点与使用

虚基类使得在继承间接共同基类时只保留一份成员。
注意:虚基类不是在声明基类时声明的,而是在声明派生类时,指定继承方式时声明的。

class A{
	A(int i){}
	};
class B:virtual public A{
	B(int n):A(n){}
	};
class C:virtual public A{
	C(int n):A(n){}
	};
class D:public B,public C{
	D(int n):A(n),B(n),C(n){}
	};

最后的派生类中不仅要负责对其直接基类进行初始化,还要负责对虚基类初始化。

8.5 多态性与虚函数

虚函数的特点与使用

virtual

虚函数就是在基类声明函数时虚拟的,并不是实际存在的函数,然后再派生类中才正式定义此函数。
虚函数的作用是允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来访问基类和派生类中的同名函数。

虚函数、纯虚函数、抽象类
抽象类:含有纯虚函数的类,也叫抽象基类

//抽象类 
calss Shape{
	public:
		virtual float area() const {return 0;}  //虚函数
		virtual void shapeName() const = 0;     //纯虚函数 
}

如何实现动态多态性

多态性:向不同的对象发送同一个消息,不同的对象在接收时会产生不同的行为(即方法)。
静态多态性:通过重载函数实现。编译时的多态性。
动态多态性:通过虚函数实现的。运行时的多态性。

静态关联:在编译时即可确定其调用的虚函数属于哪一个类。例:函数重载
动态关联:在运行阶段把虚函数和类对象“绑定”在一起。

函数模板和类模板的使用和编写

//函数模板
template<typename T>
T max(T a,T b,T c){
	if(b>a)a=b;
	if(c>a)a=c;
	return a;
}
int main(){
	int i1=10,i2=15,i3=5;
	max(i1,i2,i3);
}

//类模板
template<class numtype>
class Compare{
	private:
		numtype x,y;
	public:
		Compare(numtype a,numtype b){			
		}
		numtype max(){
			return (x>y)?x:y;
		}
};
int main(){
	Compare<int> com(3,5);
}

类模板如何实例化,如何创建对象

见上条

函数模板和模板函数、类模板和模板类的区别

函数模板、类模板:重点是模板

//函数模板、类模板
template<typename T>
template<class numtype>

模板函数、模板类:重点是函数、类

max(i1,i2,i3);     //模板函数
Compare<int> com(3,5);       //模板类 
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-23 15:34:46  更:2021-12-23 15:37:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 13:33:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码