effective c++ 将成员变量声明为private

本文探讨了在程序开发过程中遇到的常见错误,并提供了有效的应对策略。包括错误定位技巧、代码复用、文档更新、编译流程管理等方面,旨在帮助开发者提高效率,减少调试时间。同时强调了反思错误的重要性,提倡在每次编写代码前进行深入思考,以预防潜在问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一旦你将一个成员变量声明为public或protected而用户开始使用它,就很难改变那个成员变量所涉及的一切。如果改变:太多代码需要重写,重新测试,重新编写文档,重新编译


#include<iostream>
using namespace std;
//////////////////////////////////////////////////////////////////////////
class A       //父类
{
private:
    int privatedateA;
protected:
    int protecteddateA;
public:
    int publicdateA;
};
//////////////////////////////////////////////////////////////////////////
class B :public A      //基类A的派生类B(共有继承)
{
public:
    void funct()
    {
        int b;
        ///b=privatedateA;   //error:基类中私有成员在派生类中是不可见的
        b=protecteddateA; //ok:基类的保护成员在派生类中为保护成员
        b=publicdateA;    //ok:基类的公共成员在派生类中为公共成员
    }
};
//////////////////////////////////////////////////////////////////////////
class C :private A  //基类A的派生类C(私有继承)
{
public:
    void funct()
    {
        int c;
        ///c=privatedateA;    //error:基类中私有成员在派生类中是不可见的
        c=protecteddateA;  //ok:基类的保护成员在派生类中为私有成员
        c=publicdateA;     //ok:基类的公共成员在派生类中为私有成员
    }
};
//////////////////////////////////////////////////////////////////////////
class D :protected A   //基类A的派生类D(保护继承)
{
public:
    void funct()
    {
        int d;
        ///d=privatedateA;   //error:基类中私有成员在派生类中是不可见的
        d=protecteddateA; //ok:基类的保护成员在派生类中为保护成员
        d=publicdateA;    //ok:基类的公共成员在派生类中为保护成员
    }
};
//////////////////////////////////////////////////////////////////////////
int main()
{
    int a;

    B objB;
    ///a=objB.privatedateA;   //error:基类中私有成员在派生类中是不可见的,对对象不可见
    ///a=objB.protecteddateA; //error:基类的保护成员在派生类中为保护成员,对对象不可见
    a=objB.publicdateA;    //ok:基类的公共成员在派生类中为公共成员,对对象可见

    C objC;
    ///a=objC.privatedateA;   //error:基类中私有成员在派生类中是不可见的,对对象不可见
    ///a=objC.protecteddateA; //error:基类的保护成员在派生类中为私有成员,对对象不可见
    ///a=objC.publicdateA;    //error:基类的公共成员在派生类中为私有成员,对对象不可见

    D objD;
    ///a=objD.privatedateA;   //error:基类中私有成员在派生类中是不可见的,对对象不可见
    ///a=objD.protecteddateA; //error:基类的保护成员在派生类中为保护成员,对对象不可见
    ///a=objD.publicdateA;    //error:基类的公共成员在派生类中为保护成员,对对象不可见

    return 0;
}

引用csqlwy

protected并不比public更具有封装性

昨天写可视化作业,写了个小程序处理数据,一点小错改了好久,总结一下:
1.犯了错,不应该立刻去盲目查错,停下来,想一分钟再动手
2.每写一部分,比如一个循环,都仔细想想再动手

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值