抽象函数
抽象函数也可以在基类中实现。
class Role {
public:
virtual void attack() {
cout << "角色!"<<endl;
}
};
class Warrior: public Role {
public:
void attack() {
cout << "战士!"<<endl;
}
};
class Magician: public Role {
public:
void attack() {
cout << "法师!"<<endl;
}
};
现在,当你创建一个Role指针,并调用attack()函数时,编译器会调用该指针指向的对应于该对象类型的函数:
int main() {
Warrior w;
Magician m;
Role r;
Role *r1 = &w;
Role *r2 = &m;
Role *r3 = &r;
r1->attack();
// 输出 "战士!"
r2->attack();
// 输出 "法师!"
r3->attack();
// 输出 "角色!"
}

纯虚函数
在某些情况下,你希望在一个基类中包含一个抽象函数,以便它可以在派生类中被重新定义以适应该类的对象,但是没有有意义的定义给基类中的函数类。
没有定义的抽象成员函数被称为纯虚函数。他们指定派生类自己定义该函数。
语法是用= 0(一个等号和一个零)替换它们的定义:
class Role {
public:
virtual void attack() = 0;
};
一个纯虚函数基本上定义了派生类将自己去定义的那个函数。
从具有纯虚拟函数的类继承的每个派生类必须重写该函数。
如果纯虚函数没有在派生类中重写,那么当您尝试实例化派生类的对象时,代码将无法编译并导致错误。

Role类中的纯虚函数必须在其派生类中重写。
class Role {
public:
virtual void attack() = 0;
};
class Warrior: public Role {
public:
void attack() {
cout << "战士!"<<endl;
}
};
class Magician: public Role {
public:
void attack() {
cout << "法师!"<<endl;
}
};
在Person类中声明一个纯虚函数sayHello(),并在派生类Boy类中重写它
#include <iostream>
using namespace std;
class Person{
public:
virtual void sayHello() =0;
};
class Boy:public Person{
public:
void sayHello(){
cout << "Hello,My Dear." <<endl;
}
};
我们不能对一个有纯虚函数的基类创建对象。
下列例子将会报错。
Role r; // Role拥有一个纯虚函数,这样创建对象将会报错
这些类被称为抽象类。他们只能被当作基类使用,因此被允许具有纯虚函数。
我们可能会认为抽象基类是无用的,但事实并非如此。 它可以用来创建指针并利用其的多态性质。
例如:
Warrior w;
Magician m;
Role *r1 = &w;
Role *r2 = &m;
r1->attack();
r2->attack();

文章评论
Everything is very open with a really clear clarification of the challenges. It was really informative. Your website is extremely helpful. Thank you for sharing!
אני מאוד ממליץ על אתר הזה כנסו עכשיו ותהנו ממגוון רחב של בחורות ברמה מאוד גבוהה. רק באתר ישראל נייט לאדי <a href="https://romantik69.co.il/">נערות ליווי</a>