有时我们不能提供基类中所有函数的实现,因为我们不知道实现。这样的类称为抽象类。例如,使形状成为基类。我们不能在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