C++中的类继承与权限

Protected&&Private&&Public的区别

之前学习java就只知道使用public,对于private的概念也很模糊,就是觉得都能用,也没去研究区别,今天也要来一探究竟。

关于这个方面的概念,我在菜鸟教程上看到的关系图还是挺清晰明了的,在这里截个图看看:
这里写图片描述

很直观的体现出了差别,使用public时,不论是同一个类,或者是派生类,或者是外部类,都可以直接使用和访问,比如下面这串代码:
最近在学C++,这里就用C++来演示吧

#include "pch.h"
#include <iostream>
using namespace std;
// 基类
class Shape
{
public:
    void setWidth(int w)
    {
        width = w;
    }
    void setHeight(int h)
    {
        height = h;
    }
public:
    int width;
    int height;

};

// 派生类
class Rectangle : public Shape
{
public:
    int getArea()
    {
        return (width * height);
    }
public:
    int use_getArea()
    {
        return getArea();
    }
};

int main(void)
{
    Rectangle Rect;

    Rect.setWidth(5);
    Rect.setHeight(7);

    // 输出对象的面积
    cout << "Total area: " << Rect.use_getArea() << endl;

    return 0;
}

这里最后的输出是35,过程是use_getArea函数去调用了同一个类中的getArea,而getArea是调用了基类的width和height,而且也能在派生类中调用setWidth和setHeight,看起来如果使用public,便可以随处使用类中的方法和定义的变量类型,只要继承以后输入相同的关键字即可。
下面是Protectd方式:
当Shape改编为protected时

class Shape
{
protected:
    void setWidth(int w)
    {
        width = w;
    }
    void setHeight(int h)
    {
        height = h;
    }
protected:
    int width;
    int height;

};

在mian中的调用就会失败:

int main(void)
{
    Rectangle Rect;

    Rect.setWidth(5);//调用失败
    Rect.setHeight(7);//调用失败
    //如果是visual studio在控制台就会出现"函数‘Shap:::setWidth’已申明不可访问"
    cout << "Total area: " << Rect.use_getArea() << endl;

    return 0;
}

但是可以在class Rectangle中直接传入参数,一样可以调用setWindth等,这就是派生类可以调用而外部的类不行。

最后看到Private:
这里写图片描述
在此可以看到,无论是派生类和第三方的类都无法直接调用Shape里面的Private参数只有在自己的类中才可以,如下:
这里写图片描述
所以根据自己的需要,可以给Class的函数和参数做权限的设置,对于一些特殊的程序来说,也是一个很不错的方案。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值