专栏分类:C语言初阶 C语言进阶 数据结构初阶 Linux C++初阶 C++进阶 算法
欢迎大家点赞,评论,收藏。
一起努力,一起奔赴大厂
目录
一.多态的定义与使用
1.1多态的构成
a.需要继承,通过基类的指针或者引用的调用虚函数
b.被调用的必须是虚函数,且派生类需要对基类虚函数进行重写
class Person
{
public:
virtual void BuyTrick()
{
cout << "买票--全价" << endl;
}
private:
int _a;
};
class Student:public Person
{
public:
virtual void BuyTrick()
{
cout << "买票--半价" << endl;
}
private:
int _b;
};
void func(Person& people)
{
people.BuyTrick();
}
void test()
{
Person p;
func(p);
Student s;
func(s);
}
运行可以看到
1.2虚函数
class Person
{
public:
virtual void BuyTrick()
{
cout << "买票--全价" << endl;
}
private:
int _a;
};
通过virtual进行修饰的函数就是虚函数
1.3虚函数重写
虚函数的重写就是有一个父类一个子类,父类是虚函数,子类也是虚函数,并且需要保证三同(返回值,函数名,参数),但是虚函数重写有一些特殊情况
1.3.1协变(返回值不同的情况)
重写的虚函数的返回值是类这个类是另外一个继承的类,父类返回父类,子类返回子类,其余相同,我们看代码:
class A
{
};
class B :public A
{
};
class Person
{
public:
virtual A* BuyTrick()
{
cout << "买票--全价" << endl;
return nullptr;
}
private:
int _a;
};
class Student:public Person
{
public:
virtual B* BuyTrick()
{
cout << "买票--半价" << endl;
return nullptr;
}
private:
int _b;
};
void func(Person& people)
{
people.BuyTrick();
}
void test()
{
Person