抽象类|C++
抽象函数
抽象函数也可以在基类中实现。
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();
版权声明:
作者:RHZ
链接:https://www.rhzhz.cn/?p=976
来源:RHZ | 用文字记录工作和学习生活
文章版权归作者所有,未经允许请勿转载。
THE END
0
二维码
海报
抽象类|C++
抽象函数
抽象函数也可以在基类中实现。
class Role {
public:
virtual void attack() {
cout << "角色!"<<endl;
}
};
class War……
共有 0 条评论