hello~ 很高兴见到大家! 这次带来的是C++中关于多态这部分的一些知识点,如果对你有所帮助的话,可否留下你宝贵的三连呢? 个 人 主 页: 默|笙

多态通俗来讲就是多种形态。多态分为编译时多态(静态多态)与运行时多态(动态多态)。
多态是一个继承关系下的类对象(基类对象与派生类对象),用指向它们的基类指针去调用同一个函数,由于指向的对象不同,因而产生了不同的行为。
class Person
{
public:
virtual void BuyTicket() { cout << "买票-全价" << endl; }
};
class Student : public Person
{
public:
virtual void BuyTicket() { cout << "买票-半价" << endl; }
};
void Func(Person* ptr)
{
ptr->BuyTicket();
}
int main()
{
Person p;
Student s;
Func(&p);
Func(&s);
return 0;
}
要实现运行时多态,必须满足以下两个条件:
类成员函数前面加virtual修饰,那么这个成员函数就被称为虚函数。非成员函数不能添加virtual进行修饰。
class Person
{
public:
virtual void BuyTicket() { cout << "买票-全价" << endl; }
};class A
{
public:
virtual void func(int val = 1) { std::cout << "A->" << val << std::endl; }
virtual void test() { func(); }
};
class B : public A
{
public:
void func(int val = 0) { std::cout << "B->" << val << std::endl; }
};
int main(int argc, char* argv[])
{
B* p = new B;
p->test();
return 0;
}协变:派生类重写基类虚函数时,与基类函数返回值类型不同。即基类虚函数返回基类对象的指针或者引用,派生类虚函数返回派生类对象的指针或引用。
class A
{
public:
~A()
{
cout << "~A()" << endl;
}
};
class B : public A {
public:
~B()
{
cout << "~B()->delete:" << _p << endl;
delete _p;
}
protected:
int* _p = new int[10];
};
int main()
{
A* p1 = new A;
A* p2 = new B;
delete p1;
delete p2;
return 0;
}
格式:函数声明 override {}
如:virtual BuyTicket() override { cout << "全价买票" << endl; }格式:函数声明 final {}
如:virtual BuyTicket() final {cout << "全价买票" << endl; }final修饰类,类不能被继承,final修饰基类虚函数,虚函数不能被重写。

今天的分享就到此结束啦,如果对读者朋友们有所帮助的话,可否留下宝贵的三连呢~~ 让我们共同努力, 一起走下去!