有时我们不能提供基类中所有函数的实现,因为我们不知道实现。这样的类称为抽象类。例如,使形状成为基类。我们不能在Shape中提供函数draw的实现,但是我们知道每个派生类都必须有draw的实现。同样的,Animal类也没有move的实现,但是所有的动物都必须知道如何移动。我们不能创建抽象类的对象。

C ++中的纯虚函数是我们没有实现的虚函数,所以只声明。通过将0赋给声明来声明纯虚函数。请参见以下示例。

//抽象类

分类试验

{

//类的数据成员

公共:

//纯虚函数

虚void show= 0;

/*其他成员*/

};

一个完整的例子:

纯虚函数由抽象类派生的类实现。下面是一个简单的例子,演示了同样的情况。

#include<。iostream>。

使用命名空间标准;

基类

{

int x;

公共:

virtual void fun= 0;

int GetX{ return x;}

};

//这个类继承自Base,实现fun

类派生的:公共基础

{

int y;

公共:

void fun{ cout & lt;& lt“fun调用”;}

};

int main

{

衍生d;

d . fun;

返回0;

}

输出:

Fun调用

一些有趣的事实:

1)一个类如果至少有一个纯虚函数就是抽象的。

在下面的例子中,Test是一个抽象类,因为它有一个纯虚函数show。

//纯虚函数使类抽象

#include<。iostream>。

使用命名空间标准;

分类试验

{

int x;

公共:

虚void show= 0;

int GetX{ return x;}

};

int main

{

测试t;

返回0;

}

输出:

编译器错误:变量“t”不能声明为抽象的

输入“测试”,因为下列虚函数是纯函数

在“测试”中:注意:虚拟空间测试::显示

2)我们可以有抽象类类型的指针和引用。

例如,以下程序工作正常。

#include<。iostream>。

使用命名空间标准;

基类

{

公共:

虚void show= 0;

};

类派生的:公共基础

{

公共:

void show{ cout & lt;& lt”在派生 n”;}

};

int main

{

base * BP = new Dedered;

bp->。show;

返回0;

}

输出:

源自

3)如果我们不在派生类中覆盖纯虚函数,那么派生类就会变成抽象类。

以下示例演示了相同的内容。

#include<。iostream>。

使用命名空间标准;

基类

{

公共:

虚void show= 0;

};

派生类:公共基类{ };

int main

{

衍生d;

返回0;

}

编译器错误:变量“d”不能声明为抽象类型

因为下列虚函数是纯虚函数

“派生”:虚空基::显示

4)抽象类可以有构造函数。

比如下面这个程序编译运行正常。

#include<。iostream>。

使用命名空间标准;

//带构造函数的抽象类

基类

{

受保护:

int x;

公共:

virtual void fun= 0;

base{ x = I;}

};

类派生的:公共基础

{

int y;

公共:

派生:Base{ y = j;}

void fun{ cout & lt;& lt" x = " <。& ltx <。& lt",y = " & lt& lty;}

};

int main

{

导出d;

d . fun;

返回0;

}

输出:

x = 4,y = 5

与Java的比较

在Java中,可以使用抽象关键字使一个类抽象。同样,您可以使用抽象关键字将函数设置为纯虚拟或抽象的。如需详细资讯,请参阅

Java中的抽象类。

接口和抽象类:

一个接口没有任何方法的实现,它可以被看作是方法声明的集合。在C ++中,可以通过将所有方法设置为纯虚函数来模拟接口。在Java中,接口只有一个关键字。

1.《纯虚函数 C ++中的纯虚函数和抽象类》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《纯虚函数 C ++中的纯虚函数和抽象类》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/jiaoyu/1724300.html