多态性和虚函数、纯虚函数

原创 2012年03月22日 12:59:28
#include <iostream.h>

class people
{
public:
	void eat()
	{
		cout << "people eat" << endl;
	}
	void sleep()
	{
		cout << "people sleep" << endl;
	}
	void breathe()
	{
		cout << "people breathe" << endl;
	}
};

class man:public people
{
public:
	void breathe()
	{
		cout << "man breathe" << endl;
	}
};

void fun(people *pPeople)
{
	pPeople->breathe();
}

int main(void)
{
	people *pPeople;
	man m;
	pPeople = &m;
	fun(pPeople);
	return 0;
}

运行程序,输出:
people breathe
Press any key to continue

man对象也是一个people对象,将man对象转换为people对象不需要强制转换。
将man对象m的地址赋给pPeople时,编译器进行了类型转换,编译器认为pPeople保存的是people对象的地址。

用virtual声明的函数叫虚函数。
#include <iostream.h>

class people
{
public:
	void eat()
	{
		cout << "people eat" << endl;
	}
	void sleep()
	{
		cout << "people sleep" << endl;
	}
	virtual void breathe()
	{
		cout << "people breathe" << endl;
	}
};

class man:public people
{
public:
	void breathe()
	{
		cout << "man breathe" << endl;
	}
};

void fun(people *pPeople)
{
	pPeople->breathe();
}

int main(void)
{
	people *pPeople;
	man m;
	pPeople = &m;
	fun(pPeople);
	return 0;
}
运行程序,输出:
man breathe
Press any key to continue

这就是C++中的多态性。当编译器发现people类中的breathe是虚函数,就会采用迟绑定技术。就是在编译的时候并不确定具体调用的函数,而是在运行时,根据对象的类型确定,这就是C++的多态性。
在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时会根据对象的实际类型来调用相应的函数,即对象类型是派生类,就调用派生类的函数;如果对象类型是基类,就调用基类的函数。
纯虚函数是被指明不具体实现的虚成员函数。纯虚函数也可以有函数体。它在派生类中具体定义。具有纯虚函数的类叫抽象类,它不能声明对象。
C++的多态性是由虚函数实现的,而不是纯虚函数。如果子类有对基类虚函数的覆盖定义,无论该覆盖定义前是否有virtual,都是虚函数。

多态与虚函数,纯虚函数的概念

首先,在了解什么是多态之前,要了解什么是虚函数,虚函数对于多态具有决定性的作用,有虚函数才能构成多态。怎么样创建一个含有虚函数的类呢,其实就是函数类型前面加上关键字virtual,借助虚函数,基类指针...
  • Cineze
  • Cineze
  • 2016年08月22日 14:36
  • 689

关于虚函数和多态(很好的解释)

C++:派生类中重定义基类的成员函数与虚函数区别在哪里?
  • foreverhuylee
  • foreverhuylee
  • 2014年07月17日 12:15
  • 2152

C++的多态与虚函数

多态的作用:继承是子类使用父类的方法,而多态则是父类使用子类的方法。 在C++中,多态有两种,一种是函数重载,一种是虚函数。函数重载发生在编译的时候,它的函数参是不一样的。而虚函数是发生在运行的时候,...
  • chencheng126
  • chencheng126
  • 2015年01月06日 21:49
  • 1728

虚函数、纯虚函数、抽象类、抽象方法和接口

首先讲下自己最近的电话面试遇到的相关问题。1、多态的两种实现方式?2、虚函数与纯虚函数的区别,如何使用这两种方式?3、接口和抽象类的关系?由这两个问题开始深入的理解一下虚函数,纯虚函数以及抽象类和接口...
  • feihaixin
  • feihaixin
  • 2015年02月15日 14:44
  • 761

C++虚函数和纯虚函数和抽象类

C++虚函数和纯虚函数和抽象类分析
  • x_r_su
  • x_r_su
  • 2016年08月31日 13:31
  • 736

C++多态性 虚函数与纯虚函数 重载与覆盖

转载来源:http://blog.csdn.net/hackbuteer1/article/details/7475622  C++编程语言是一款应用广泛,支持多种程序设计的计算机编程语言。...
  • Levy1021
  • Levy1021
  • 2015年05月02日 19:56
  • 592

多态,虚函数,纯虚函数

①多态:多态可以增加其灵活性,小程序凸显不出多态的威力。 1:创建类,定义虚函数            定义:  关键字:virtual 类型 名字(){}  虚函数对于多态具有决定性的作用,有虚函数...
  • laofengge
  • laofengge
  • 2016年08月22日 14:29
  • 1781

C++中的构造函数/析构函数,虚函数/纯虚函数

1、构造函数能不能是虚函数:  1.1从存储空间角度 虚函数对应一个vtable,这大家都知道,可是这个vtable其实是存储在对象的内存空间的。问题出来了,如果构造函数是虚的,就需要通过...
  • KingCat666
  • KingCat666
  • 2015年04月07日 10:35
  • 1180

C++ 虚函数、纯虚函数 VS JAVA抽象函数

C++ 虚函数、纯虚函数 VS JAVA抽象函数
  • whjk20
  • whjk20
  • 2016年08月29日 15:02
  • 971

C++学习之虚函数与纯虚函数

面向对象程序设计(object-oriented programming)的核心思想是数据抽象、继承、动态绑定。通过数据抽象,可以使类的接口与实现分离,使用继承,可以更容易地定义与其他类相似但不完全相...
  • lisong694767315
  • lisong694767315
  • 2014年07月16日 02:05
  • 2182
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:多态性和虚函数、纯虚函数
举报原因:
原因补充:

(最多只允许输入30个字)