栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++多态

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++多态

子类调用父类成员函数的方法:
1、直接在子类重写的函数中调用父类成员函数

#include 
using namespace std;

class Animal 
{
public:
	int m_age;
	virtual void speak()
	{
		cout << "Animal::speak() " << endl;
	}

	virtual void run()
	{
		cout << "Animal::run() " << endl;
	}
};

class Cat :public Animal
{
public:
	int m_life;
	//重写
	void speak()
	{
		//在这里调用父类成员函数,直接加父类作用域即可;
		Animal::speak();
		cout << "Cat::speak() " << endl;
	}
	void run()
	{
		cout << "Cat::run() " << endl;
	}
};

int main()
{
	Animal* p = new Cat();
	//这样访问不行
	//p->m_life = 10;
	
	//这样调用子类的speak()就会调用到父类的speak();
	p->speak();
	p->run();
	getchar();
	return 0;
}

2、直接用父类的指针调用

#include 
using namespace std;

class Animal 
{
public:
	int m_age;
	virtual void speak()
	{
		cout << "Animal::speak() " << endl;
	}

	virtual void run()
	{
		cout << "Animal::run() " << endl;
	}
};

class Cat :public Animal
{
public:
	int m_life;
	//重写
	void speak()
	{
		cout << "Cat::speak() " << endl;
	}
	void run()
	{
		cout << "Cat::run() " << endl;
	}
};

int main()
{
	Animal* p = new Cat();
	//这样访问不行
	//p->m_life = 10;
	p->speak();
	//这样就会调用到父类的speak();
	p->Animal::speak();
	p->run();
	getchar();
	return 0;
}

注意:父类指针指向子类对象时(也就是多态);父类的析构函数必须为虚函数(virtual)才行,这样对象消亡时才会调用子类的析构函数,否则只会调用父类的:
注 :构造函数不能写成虚函数,会报错!

#include 
using namespace std;

class Animal 
{
public:
	Animal()
	{
		cout << "Animal::Animal() " << endl;
	}

	virtual ~Animal()
	{
		cout << "Animal::~Animal() " << endl;
	}
};

class Cat :public Animal
{
public:
	Cat()
	{
		cout << "Cat::Cat() " << endl;
	}
	~Cat()
	{
		cout << "Cat::~Cat() " << endl;
	}
};

int main()
{
	Animal* p = new Cat();
	delete p;
	getchar();
	return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1012751.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号