C++中的继承和虚函数、纯虚函数

本文详细介绍了C++中的继承,包括公有、保护和私有继承的特性,通过实例展示了不同继承方式下子类对父类成员的访问权限。同时,深入探讨了虚函数和纯虚函数的概念,以及它们在抽象类中的应用。虚函数允许动态绑定,而纯虚函数使得类成为抽象类,子类必须实现纯虚函数才能实例化。
摘要由CSDN通过智能技术生成

一、继承

C++中存在着继承关系,可以想象称为世袭制,哈哈这样会更有助于帮助理解,C++中的继承和我们现实中的世袭是差不多的,C++中的继承在两个或者多个类中体现的,这里我们直说两个类的,复杂的继承我们不进行讨论。我们都知道继承不能够继承父的生和死还有他的私有,继承和我们类中声明方法和成员是类似的,也有公有继承、保护继承和私有继承三种。我们分别来看看这三种属性的继承:
(说明:父类的私有成员和方法只有父类的方法才能直接访问)
1、公有继承父的所有原属性方法和成员,子类的方法可以方问父类的公有和保护方法以及成员,子类对象可以访问父类公有成员和方法,子类对象不能直接访问其私有和保护的成员及方法。

#include <iostream>
using namespace std;

class A
{
public:
    A()
    {
        cout<<"this is A"<<endl;
    }
     ~A()
    {
        cout<<"this is ~A"<<endl;
    }

    void fun()
    {
        cout<<"A:: fun"<<endl;
    }
protected:
    virtual void fun1()
    {
        cout<<"protected A::fun1"<<endl;
    }

private:
    int ar;
    void fun2()
    {
        cout<<"private A::fun2"<<endl;
    }
};
class B:public A
{
public:
    B()
    {cout<<"this is B"<<endl;};
    ~B()
    {cout<<"this is ~B"<<endl;}
    void fun3()
    {
        cout<<"B::fun3:>";
        fun1();
        //fun2();//父类的私有只有父类方法可以访问
    }
private:
    int data;


};
int main()
{
    B b;
    A a;
    a.fun();
//  a.fun1();//1
    //a.fun2();//2
/////////////////////////////////
    cout<<"**********************************"<<endl;
    b.fun();
    //b.fun1();//3
    //b.fun2();//4
    //b.fun3();//5
    return 0;
}

运行结果:
这里写图片描述
如果放开代码中注释的1和2这两个错误我们肯定知道对象无法直接访问自己的私有和保护的成员及方法,只有通过自己的公有方法才可以,那么我们放开3、4看看会有什么错误提示:
这里写图片描述
根据错误提示来印证我们当初的猜想是正确的,子类无法直接访问父类的保护和私有成员及方法。
我们接着试着放开5看一下是否可以运行:
这里写图片描述
子类的方法是可以直接访问父类的保护方法的。

2、保护继承是把父类的公有方法及成员保护继承,在父类中的保护和公有的方法及成员都将变成保护型,也相当于子类中的保护型了,其他都是原属性继承,保护继承后子类不能直接访问父的所有方法和成员。
我们继续使用上面代码实验:

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值