当前位置 : 主页 > 编程语言 > c语言 >

多态(一)

来源:互联网 收集:自由互联 发布时间:2023-08-25
多态 多态就是多种形态,具体点就是当不同的对象去完成时会产生不同的状态。 把 virtual 加在一个虚函数的前面,我们叫做虚函数。 虚继承和虚函数没有关系。 函数名相同,参数列表

多态

多态就是多种形态,具体点就是当不同的对象去完成时会产生不同的状态。

virtual加在一个虚函数的前面,我们叫做虚函数。

虚继承和虚函数没有关系。

函数名相同,参数列表相同他们叫做重写或者覆盖,这里没有重载的关系,重载必须在同一个作用域。

#include <iostream>
using namespace std;
class Person {
public:
	virtual void Buyticket()
	{
		cout << "买票-全价" << endl;
	}
};
class Student :public Person {
public:
	//重写/覆盖
	virtual void Buyticket()
	{
		cout << "买票-半价" << endl;
	}
};
void Func(Person& p)
{
	p.Buyticket();
}
int main()
{
	Student s;
	Person p;
	Func(s);
	Func(p);
	return 0;
}

构成多态以后传父类调用的是父类的虚函数,传子类调用的是子类的虚函数。

Func函数参数中既可以传父类的对象也可以传子类的对象。

多态的两个条件:1.虚函数的重写,三同(函数名、参数、返回值);2.父类的指针或者引用去调用。

那当我们不使用指针或者引用的时候能不能调用?不能。

image-20230421092937493

我们来看一下,有些情况没有多态不行

class Person {
public:
	~Person()
	{
		cout << "~Person" << endl;

	}
};
class Student :public Person {
public:
	//重写/覆盖
	~Student() {
		cout << "~Student" << endl;
}
};

int main()
{
	Person p;
	Student s;
	return 0;
}

image-20230421093316392标记

上一篇:一文掌握C++多态
下一篇:没有了
网友评论