c++ 多态的哪些事

c++ 是一种面相对象的语言,其核心主要是表现在c++语言的多态上,简单的概括为“一个接口,多种形态”。多态的特性是通过虚函数来实现的。虚函数允许子类重写父类的函数,只有重写了虚函数才能体现c++ 的多态特性。一般的子类可以重载父类的成员函数,这些重载的函数 允许多个同名函数,函数的参数列表不同,参数的个数不同,参数类型不同。编译器会根据这些函数的参数列表,参数类型,参数个数,等生成一些不同名字的预处理函数。来实现同名函数的调用重载。但是没有体现c++ 的多态特性。

c++的多态特性主要是体现在,函数的地址是早绑定还是晚绑定,如果函数调用在编译器编译时,就可以确定函数的调用地址,那么就是早绑定,如果函数的调用地址不能再编译期间确定,需要在运行时才能确定,这就属于晚绑定。

下面看一个简单的例子:

#include <iostream>
#include <string>

using namespace std;


class  Base
{
	public:
		void func1()
		{
			cout << " Base func1 1" << endl;
		}
		virtual void func2()
		{
			cout << " Base func2 2 " << endl;
		}
};

class CTest : public Base
{
	
	public:
		void func1()
		{
			cout << " CTest func1 1" << endl;
		}
		
		void func2()
		{
			cout << "CTest func2 2" << endl;
		}
};

int main()
{
	
	Base a;
	CTest b;
	
	Base* p = &a;
	p->func1();   // Base func1 1
	p->func2();   // Base func2 2
	
	p = &b;
	p->func1();  // Base func1 1
	p->func2();	 // CTest func2 2
	
	return 0;
}

运行的结果如下:

由上面的结果可以看到,基类指针p 在第二次指向CTest对象时候,运行p->func2() 函数时,体现出多态特性,此时调用的是子类CTest中的方法,而不是基类中的func2()。

 

纯虚函数和虚函数:

 1.纯虚函数是在基类中声明的虚函数,在基类中没有任何的定义,但是要求在任何的派生类中需要自己实现这个自己的方法。原型一般是: virtual void function() =0;

2.纯虚基类 也叫做抽象类 不能实例化,不能生成对象,。

3.虚函数在基类中被声明为virtual,在派生类中,各自实现自己的函数,可实现运行时多态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值