如何将多态(一)的概念应用于复杂编程场景中?
- 内容介绍
- 文章标签
- 相关推荐
本文共计461个文字,预计阅读时间需要2分钟。
多态+多态就是多种形态,具体点就是当不同的对象完成时会产生不同的状态。+把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.父类的指针或者引用去调用。
本文共计461个文字,预计阅读时间需要2分钟。
多态+多态就是多种形态,具体点就是当不同的对象完成时会产生不同的状态。+把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.父类的指针或者引用去调用。

