多态,虚函数,纯虚函数

时间:2023-01-28 21:54:17

多态借助虚函数,基类指针既可以使用基类(父类)的成员函数,也可以使用派生类(子类)的成员函数,它有多种形态,或多种表现方式,这就是多态    简单说就是同一条语句可以执行不同的操作,看起来有不同表现方式,这就是多态。

构成多态的条件

多态存在的三个条件:
  • 必须存在继承关系;
  • 继承关系中必须有同名的虚函数,并且它们是覆盖关系(重载不行)。
  • 存在基类的指针,通过该指针调用虚函数。

注意:派生类(子类)中的虚函数必须覆盖(不是重载)基类(父类)中的虚函数,才能通过基类指针访问

1:创建类,定义虚函数            定义:  关键字:virtual 类型 名字(){}  虚函数对于多态具有决定性的作用,有虚函数才能构成多态

) virtual 关键字仅用于函数声明,如果函数是在类外定义,则不需要再加上virtual关键字。

所有派生类中具有覆盖关系的同名函数都将自动成为虚函数。

2: 虚函数作用:让每个类都可以 覆盖这个方法的内容,非静态成员,具有继承性,不是重载声明而是覆盖,执行不同的函数,

通过指针指向或者引用 在C++中,虚函数的唯一用处就是构成多态。

3:创建类的两种方式:

动态创建:1:base *p=new base()

                   p->函数

                     2:  p1=new 子类名

                        p1->子类函数            可以在多个类中使用,重载只能在一个类中使用

和重载函数的 区别:虚函数不能被修改参数和返回类型,而且参数和返回类型一致,


②:纯虚函数的定义方式:virtual void showme(参数列表)=0;

纯虚函数没有函数体,只有函数声明,在虚函数声明结尾加上=0,表明此函数为纯虚函数。

最后的=0并不表示函数返回值为0,它只起形式上的作用,告诉编译系统“这是纯虚函数”。

默认为抽象类不允许创建对象,原因很明显,纯虚函数没有函数体,不是完整的函数,无法调用,也无法为其分配内存空间。和类有本质的区别:

) 只有类中的虚函数才能被声明为纯虚成员函数,普通成员函数和顶层函数均不能声明为纯虚函数,定义了抽象函数,则这个类就会变成抽象类

共同特征:实现多态,

如何使用:声明为纯虚函数,在派生类中实现

#ifndef  __TEST_H_                 作用:声明函数的唯一性

#define  __TEST_H_  


简单的使用虚函数和纯虚函数:

//多态 虚函数,纯虚函数
<strong>#include<iostream>
using namespace std;


class std1{
public:
	virtual void my(){                    //虚函数
		cout<<"sanzhixiong"<<endl;
	}
	virtual void my1()=0;             //纯虚函数 创建纯虚函数时就会将这个类变成抽象类
};	
	
class std2:public std1{
public:
	void my(){
		cout<<"狗"<<endl;         //覆盖父类的虚函数,但是虚函数的结果不会改变,在main函数中依然可以使用
	}
	void my1(){
		cout<<"dashab8"<<endl;     //只能在派生类中使用纯虚函数,在main函数中调用
	}
};
	
int main(){
	std2 *p=new std2();                      //定义对象
	p->my();
	p->my1();
	//std1 *p1=new std1();                   std1中有纯虚函数 默认为抽象类,不允许创建对象
	//p1->my();
	system("pause");
	return 0;
}</strong>