C++中的抽象类以及与虚基类的异同

1.抽象类
要了解抽象类首先需要什么是纯虚函数

1、纯虚函数
纯虚函数是一个在基类中声明的虚函数,它在该基类中没有定义具体的操作内容,要求各派生类根据实际需求定义自己的版本,纯虚函数的声明格式为
virtual 函数类型 函数名(参数表)=0;

即在一个虚函数的声明语句的分号前加上=0,即可将一个虚函数变成纯虚函数,其中,=0只能出现在类内部的虚函数声明语句处。

纯虚函数只用声明,而不用定义,其存在就是为了提供接口,含有纯虚函数的类是抽象基类.纯虚函数必须在子类中被重写。

抽象类只能作为派生类的基类,不能定义对象,其作用是规范整个类家族的统一对外接口。

2、抽象类的特点
1).含有纯虚函数的类被称为抽象类。抽象类只能作为派生类的基类,不能定义对象

2).在定义纯虚函数时,不能定义虚函数的实现部分

3).抽象类的唯一用途是为派生类提供基类,纯虚函数的作用是作为派生类中的成员函数的基础,并实现动态多态性。继承于抽象类的派生类如果不能实现基类中所有的纯虚函数,那么这个派生类也就成了抽象类。因为它继承了基类的抽象函数,只要含有纯虚函数的类就是抽象类。纯虚函数已经在抽象类中定义了这个方法的声明,其它类中只能按照这个接口去实现。

3、抽象类的语法
带纯虚函数的类称为抽象类

class 类名
{
virtual 类型 函数名(参数表)=0;
//其他成员
}

4、抽象类的作用
1).将有关的数据和行为组织在一个继承层次结构中,保证派生类具有要求的行为
2).对于暂时无法实现的函数,可以声明为纯虚函数,留给派生类去实现。

注:
1).抽象类只能作为基类使用
2).不能定义抽象类的对象

5、与虚基类的不同
简单来说就是虚基类是解决多继承造成的二义性问题
而抽象类是统一对外接口。
(我觉得会搞混大概率是把C++跟java的抽象类搞混淆了,C++抽象类不用在类名前加abstract)

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
虚基类抽象类C++的两个重要概念,它们有一些区别和联系。 虚基类是被"virtual"继承的类,任何类都可以成为虚基类虚基类的主要作用是解决多重继承的菱形继承问题,即当一个派生类同时继承了两个基类,而这两个基类又共同继承自同一个虚基类时,通过虚基类可以避免派生类出现两份虚基类的实例。虚基类没有纯虚函数的要求。 抽象类是至少包含一个纯虚函数的类,它不能被实例化,即不能创建抽象类的对象。抽象类的主要作用是作为基类,为派生类提供接口和规范。派生类必须实现抽象类的纯虚函数才能被实例化。抽象类可以包含非纯虚函数和数据成员。 以下是一个示例代码,展示了虚基类抽象类的使用: ```cpp // 虚基类 class Base { public: int x; }; // 派生类1 class Derived1 : virtual public Base { public: int y; }; // 派生类2 class Derived2 : virtual public Base { public: int z; }; // 最终派生类 class FinalDerived : public Derived1, public Derived2 { public: int sum() { return x + y + z; } }; // 抽象类 class AbstractClass { public: virtual void pureVirtualFunction() = 0; void nonVirtualFunction() { // 非纯虚函数的实现 } }; int main() { FinalDerived obj; obj.x = 1; obj.y = 2; obj.z = 3; int result = obj.sum(); // 输出:6 AbstractClass* ptr; // ptr = new AbstractClass(); // 错误,抽象类不能被实例化 // 抽象类可以作为指针类型使用 ptr->pureVirtualFunction(); // 调用派生类的实现 return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值