• 谈谈父类和子类的隔离性


    以前写代码知道要给类外设置访问接口, 例如下例:

     1 class Money
     2 {
     3 public:
     4       Money(int money) : m_curValue(money){}
     5       
     6       void store(int money) { m_curValue += money;}
     7       void spent(int money){ m_curValue -= money;}
     8 private:
     9    int m_curValue; 
    10 };
    11 
    12 int main(int argc, char** argv)
    13 {
    14     Money myMoney(100);
    15     myMoney.store(100);    //通过Money类的访问接口开存取钱, 而不能直接操作前
    16     myMoney.spent(50);
    17     return 0;
    18 }

    但是呢,从未关注过父类和子类也要通过接口沟通.

    书上的话:
    //
    派生类可以直接访问基类的包含数据成员,甚至在构造时初始化它们,但是一般不这么做,而是通过基类的接口(成员函数)去访问它们,初始化也是通过基类的构造函数.
    //这样做的好处是,一旦基类的实现有错误,只有不涉及接口,那么基类的修改不会影响派生类的操作.
    //类和类直接,你做你的,我做我的,以接口作沟通.即使基类和派生类也不类外.这正是类能够发挥其生命力的原因所在

    例如:

     1 class Father
     2 {
     3 public:
     4     Father(string firstNm, string SecondNm = "大毛") : m_firstNm(firstNm), m_secondNm(secondNm)
     5     {
     6      }
     7     
     8     string getFistName(){return m_firstNm;}
     9 
    10 protected:
    11    string m_firstNm;
    12 private:
    13    string m_secondNm;
    14 };    
    15 
    16 class Son : public Father
    17 {
    18 public:
    19      Son(string FirstNm, string SecondNm) : Father(FirstNm), m_secondName(SecondNm)
    20      {
    21      }
    22 //下面的函数直接使用了基类的包含成员的函数 是不好的风格
    23      bool isFirstName(string givenNm)
    24       {
    25              return m_firstNum == givenNm ? true : false;
    26       }
    27 //下面的函数通过接口使用,才算是比较好的风格
    28      bool isFirstName(string givenNm)
    29       {
    30              return getFirstName() == givenNm ? true : false;
    31       }
    32 private:
    33     string m_secondName;
    34 };

    恩.书上的话应该就是上面的代码的也是吧.以后得多多注意啊,然后在无意识中绕过一些坑,别踩进去

  • 相关阅读:
    数据库的单表查询Ⅰ
    数据库的基本操作Ⅲ
    数据库基本操作Ⅱ
    数据库的基本操作Ⅰ
    MYSQL的三种安装方式
    操作系统学期小结二
    操作系统学期小结一
    MAP接口课堂练习
    关于list接口和set接口的示例应用
    课堂作业整理三 (集合:list接口)
  • 原文地址:https://www.cnblogs.com/silentNight/p/5559152.html
Copyright © 2020-2023  润新知