zoukankan      html  css  js  c++  java
  • [类和对象]1 封装 调用成员函数

    封装有2层含义
    1 把属性(数据和变量)和方法(函数和操作)进行封装
    2 对属性和方法进行访问控制


    3 类的内部和类的外部


    4 类的访问控制关键字
      public: 修饰的成员变量和函数 可以在类的内部和类的外部访问
      private: 修饰的成员变量和函数 只能在类的内部被访问,不能在类的外部访问
      protected: 修饰的成员变量和函数 只能在类的内部被访问,不能在类的外部访问, 用在继承里面


    5.用struct关键字定义的类,不写,默认属性是public的.
    用class关键字定义的类,不写,默认属性是private的

    调用成员函数而非全局函数来判断

    总结:C里我们如果要实现两个相同类型的对比,则要调用俩次相同的函数来实现,

       而C++使用了类后,先将这种类型抽象出来,然后直接调用成员函数就可以实现

    // 案例1    设计立方体类(cube),求出立方体的面积和体积
    //            求两个立方体,是否相等(全局函数和成员函数)
    
    #include <iostream>
    using namespace std;
    
    class Cube
    {
    public: //设置和返回ABC 
        void setA(int a)
        {
            m_a = a;
        }
        void setB(int b)
        {
            m_b = b;
        }
        void setC(int c)
        {
            m_c = c;
        }
    
        void setABC(int a=0, int b=0, int c=0)
        {
            m_a = a;  m_b = b; m_c = c;
        }
    
        int getA()
        {
            return m_a;
        }
        int getB()
        {
            return m_b;
        }
        int getC()
        {
            return m_c;
        }
    
    public://返回V S 
        int getV()
        {
            m_v = m_a*m_b*m_c;
            return m_v;
        }
    
        int getS()
        {
            m_s = 2*(m_a*m_b + m_a*m_c + m_b*m_c);
            return m_s;
        }
        
        int judgeCube(Cube &v1, Cube &v2)  //3k
        {
            if ( (v1.getA() == v2.getA()) &&
                 (v1.getB() == v2.getB()) &&
                 (v1.getC() == v2.getC()) )
            {
                return 1;
            }
            else
            {
                return 0;
            }
        }
    
        int judgeCube(Cube &v2)  //成员函数 函数重载 //4k
        {
            //Q:好多人 分不清 这个场景下的m_a 是属于v1 还是 属于v2 
            //A:自然属于v1,这里只是引用了v2,实则还是在v1里 
            if ( (this->m_a == v2.getA()) &&
                 (this->m_b == v2.getB()) &&
                 (this->m_c == v2.getC()) ) 
            {
                return 1;
            }
            else
            {
                return 0;
            }
    
            return 0;
        }
    
    private:
        int m_a;
        int m_b;
        int m_c;
        int m_v;
        int m_s;
    };
    
    
    //全局函数
    //1相等 0不相等
    int judgeCube(Cube &v1, Cube &v2)
    {
        if (    (v1.getA() == v2.getA()) &&
                (v1.getB() == v2.getB()) &&
                (v1.getC() == v2.getC())
            )
        {
            return 1;
        }
        else
        {
            return 0;
        }
    }
    
    
    /****************************************
     * 全局函数调用
     *****************************************/
    int main01() {
        Cube v1, v2;
        v1.setABC(1, 2, 3);
        cout<<v1.getS()<<endl;
        cout<<v1.getV()<<endl;
        cout<<"hello..."<<endl;
    
        v2.setABC(1,2,4);
    
        //判断两个立方体是否相等
        if (judgeCube(v1, v2) == 1)
        {
            cout<<"相等"<<endl;
        }
        else
        {
            cout<<"不相等"<<endl;
        }
        
        return 0;
    }
    
    
    /****************************************
     * 成员函数调用
     *****************************************/
    int main() {
        Cube v1, v2;
        v1.setABC(1, 2, 3);
        cout<<v1.getS()<<endl;
        cout<<v1.getV()<<endl;
        cout<<"hello..."<<endl;
        
        v2.setABC(1,2,4);
    
        //函数调用 意味着: 去执行 v1对象的类的成员judgeCube
        int tag = v1.judgeCube(v2);  //判断v1立方体 和 v2立方体是否相等 ,通过类的成员函数
        if ( tag == 1 )
        {
            cout<<"相等"<<endl;
        }
        else
        {
            cout<<"不相等"<<endl;
        }
    
        
        //判断两个立方体是否相等
        if ( v1.judgeCube(v1, v2) == 1)
        {
            cout<<"相等"<<endl;
        }
        else
        {
            cout<<"不相等"<<endl;
        }
    
        return 0;
    } 


  • 相关阅读:
    [原创]什么是兼容性测试?
    [原创]Web开发测试辅助工具介绍
    [原创]如何顺利通过中国电信Brew平台软件测试?
    [原创]网站性能优化利器之二"Yahoo Yslow"
    [原创]HP SiteScope工具介绍及下载地址
    [原创]网站前端页面级性能测试方法
    [原创]网银在线chinabank安全漏洞之“不完善的开发软件包”
    [原创] linux必学的常用命令
    [原创]如何做好目标管理?
    Visual Studio 小技巧:自定义代码片断
  • 原文地址:https://www.cnblogs.com/-Mr-y/p/7801396.html
Copyright © 2011-2022 走看看