纯虚函数和抽象类
1、纯虚函数
在虚函数的声明的后面添加=0,这种虚函数就叫做纯虚函数,可以不实现,但如果实现必须在类外(只能在父类的构造函数、析构函数中调用)。
virtual 返回值 函数名(参数) = 0;
#include <iostream>
#include <stdio.h>
using namespace std;
class Base
{
public:
Base(void)
{
func();
}
// 纯虚函数
virtual void func(void) = 0;
~Base(void)
{
func();
}
};
class A:public Base
{
public:
void func(void)
{
cout << "我是纯虚函数的覆盖"<<endl;
}
};
void Base::func(void)
{
cout<< "我是虚函数" << endl;
}
int main()
{
A a;
a.func();
//Base b;
//b.func();
}
2、抽象类
成员函数中有纯虚函数,这种类叫抽象类,抽象类不能实例化(不能创建对象)。
抽象类必须被继承且纯虚函数被覆盖后,由子类实例化对象。
如果继承抽象类,但没有覆盖纯虚函数,那么子类也将成为抽象类,不能实例化。
3、纯抽象类
所有成员函数都是纯虚函数,这种只能被继承的类叫纯抽象类。
这种类一般用来设计接口,这种类在子类被替换后不需要修改或少量的修改即可继续使用。
#include <iostream>
using namespace std;
class Base
{
public:
virtual void show(void) = 0;
};
class A:public Base
{
public:
void show(void)
{
cout << "我是类A的show函数" << endl;
}
};
class B:public Base
{
public:
void show(void)
{
cout << "我是类B的show函数" << endl;
}
};
class C:public Base
{
public:
void show(void)
{
cout << "我是类C的show函数" << endl;
}
};
enum ClassType{typeA,typeB,typeC};
// 工厂类模式
Base* creat_object(ClassType type)
{
switch(type)
{
case typeA: return new A;
case typeB: return new B;
case typeC: return new C;
default: return NULL;
}
}
int main()
{
Base* p = creat_object(typeA);
p->show();
}
网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。
加入交流群
请使用微信扫一扫!