C++多态性与虚函数定义注意事项

C++多态性与虚函数定义注意事项

学习笔记,主要来源为《C++从入门到精通》,

1. 多态性
基类指针可以调用基类的成员变量或者成员函数,也可以调用继承类的成员变量或者成员函数,这种多形态多种表现方式称为多态性。
C++提供多态性,可以通过基类指针实现对所有派生类(包括直接派生和间接派生)的成员变量和成员函数进行“全方位”的访问,尤其是成员函数。如没有多态性,只能访问成员变量。

2.虚函数
要在C++中实现多态性,成员函数必须是虚函数。虚函数使用非常简单,只需要在函数声明前加是virtual关键字即可。

结合代码来描述简单一点,使用VS Code完成代码编写和运行,如下

#include<iostream>
using namespace std;

//基类Worker
class Worker 
{
	protected:
		char	*name;
		int		age;

	public:
		//基类构造函数
		Worker(char *wname, int wage ):name(wname), age(wage)		
        /*wname(name), wage(age)参数列表,也可在{}内表示为: 
        name = Wnme;	age = wage;   */
		{
			//构造函数的参数列表
		}
	
	//虚函数声明
	virtual void  myshow()
	{
		cout<< "我的名字是" << name << ",年龄是" << age <<endl;
	}
};

//派生类People声明
class People : public Worker  //public为寄生方式
{
	public:
    People(char *pname, int page): Worker(name , age)
    {
        //构造函数参数列表
        name = pname;
        age = page;
    }
	//虚函数声明,命名与基类Worker相同
	virtual void myshow()
	{
		cout<< "我叫"<< name << ",今年" << age <<"岁,请多多关照"<<endl;
	}
};

int main()
{
	Worker *pw = new Worker ("李亮", 25); //new Worker 必不可少
	pw->myshow();
	pw = new People("万明", 22);        //new People必不可少
	pw->myshow();

}

输出结果如下,由结果可知,…

由结果可知,虚函数的应用避免了基类与派生类中同名成员函数的的覆盖。
如果函数myshow前不加virtual声明为虚函数,则实际调的只能是派生类中的myshow。
3.虚函数定义注意事项
(1) 函数声明与函数定义分开时,只需要在声明处加上virtual关键字即可。
(2)派生类中成员函数对基类中同名函数具有覆盖性,可以只将基类中的函数声明为虚函数。
(3)当基类中定义了虚函数,而派生类中没有定义新的函数来覆盖此函数,那么将直接使用基类的虚函数。
(4)只有派生类的虚函数覆盖基类的虚函数才能构成多态性,既通过指针访问派生类函数。
(5)构造函数不可以声明为虚函数。

此外还有纯虚函数,用于实现基类定义虚函数是不能给其赋予实际意义,以便于在派生类中重新定义该函数的,其语法格式为;

virtual 返回值类型  函数名 (函数参数) = 0

其中“=0 ”只是告诉编译系统这是一个纯虚函数。

接口即为包含纯虚函数的类,也称为抽象类。目的是为其他类提供一个可以继承的适当的基类。注意抽象类不能用用来实例化对象,会产生编译错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值