天天看點

c++基礎學習筆記——04-c++day03

在學習c++基礎總結了筆記,并分享出來。有問題請及時聯系部落客:​​Alliswell_WP​​,轉載請注明出處。

04-c++day03

一、類和對象

1、面向對象程式設計案例

練習1:設計立方體類(Cube)

求出立方體的面積( 2*a*b + 2*a*c + 2*b*c )和體積( a * b * c),分别用全局函數和成員函數判斷兩個立方體是否相等。

1 #define _CRT_SECURE_NO_WARNINGS
  2 #include<iostream>
  3 using namespace std;
  4 
  5 /*
  6 設計立方體類(Cube),
  7 求出立方體的面積( 2*a*b + 2*a*c + 2*b*c )和體積( a * b * c),
  8 分别用全局函數和成員函數判斷兩個立方體是否相等。
  9 */
 10 
 11 class Cube
 12 {
 13 public:
 14     
 15     //設定長
 16     void setL(int l)
 17     {
 18         m_L = l;
 19     }
 20     //擷取長
 21     int getL()
 22     {
 23         return m_L;
 24     }
 25     //設定寬
 26     void setW(int w)
 27     {
 28         m_W = w;
 29     }
 30     //擷取寬
 31     int getW()
 32     {
 33         return m_W;
 34     }
 35     //設定高
 36     void setH(int h)
 37     {
 38         m_H = l;
 39     }
 40     //擷取高
 41     int getH()
 42     {
 43         return m_H;
 44     }
 45     
 46     //求立方體的面積
 47     void getCubeS()
 48     {
 49         cout << "立方體的面積:" << 2* m_L * m_W + 2 m_L * m_H + 2 m_W * m_H << endl;
 50     }
 51     //求立方體的體積
 52     void getCubeV()
 53     {
 54         cout << "立方體的體積:" << m_L * m_W * m_H << endl;
 55     }
 56     
 57     //通過成員函數判斷是否相等
 58     bool compareCubeByClass(Cube &cub1, Cube &cub2)
 59     {
 60         if(cub1.getL() == cub2.getL() && cub1.getW() == cub2.getW() && cub1.getH() == cub2.getH() )
 61         {
 62             return true;
 63         }
 64         return false;    
 65     }
 66 
 67 private:
 68     int m_L;//長
 69     int m_W;//寬
 70     int m_H;//高
 71 }
 72 
 73 //全局函數判斷 兩個立方體是否相等
 74 bool compareCube(Cube &cub)
 75 {
 76     bool ret = m_L == cub.getL() && m_W == cub.getW() && m_H == cub.getH();
 77     return ret;
 78 }
 79 
 80 void test01()
 81 {
 82     Cube c1;
 83     c1.setL(10);
 84     c1.setW(10);
 85     c1.setH(10);
 86     
 87     c1.getCubeS();
 88     c1.getCubeV();
 89     
 90     //通過全局函數判斷兩個立方體是否相等
 91     
 92     Cube c2;
 93     c2.setL(10);
 94     c2.setW(10);
 95     c2.setH(10);
 96     
 97     bool ret = compareCube(c1, c2);
 98     if(ret)
 99     {
100         cout << "c1和c2是相等的!" << endl;
101     }
102     else
103     {
104         cout << "c1和c2是不相等的!" << endl;
105     }
106     
107     //通過成員函數判斷是否相等
108     bool ret2 = c1.compareCubeByClass(c2);
109     if(ret2)
110     {
111         cout << "c1和c2是相等的!" << endl;
112     }
113     else
114     {
115         cout << "c1和c2是不相等的!" << endl;
116     }
117 }
118 
119 int main()
120 {
121     test01();
122     
123     system("pause");
124     return EXIT_SUCCESS;
125 }      

 為什麼const剛剛不能添加?沒法保證成員函數裡是否修改了成員屬性

1 #define _CRT_SECURE_NO_WARNINGS
  2 #include<iostream>
  3 using namespace std;
  4 
  5 /*
  6 設計立方體類(Cube),
  7 求出立方體的面積( 2*a*b + 2*a*c + 2*b*c )和體積( a * b * c),
  8 分别用全局函數和成員函數判斷兩個立方體是否相等。
  9 */
 10 
 11 class Cube
 12 {
 13 public:
 14     
 15     //設定長
 16     void setL(int l)
 17     {
 18         m_L = l;
 19     }
 20     //擷取長
 21     int getL() const
 22     {
 23         return m_L;
 24     }
 25     //設定寬
 26     void setW(int w)
 27     {
 28         m_W = w;
 29     }
 30     //擷取寬
 31     int getW()
 32     {
 33         return m_W;
 34     }
 35     //設定高
 36     void setH(int h)
 37     {
 38         m_H = l;
 39     }
 40     //擷取高
 41     int getH()
 42     {
 43         return m_H;
 44     }
 45     
 46     //求立方體的面積
 47     void getCubeS()
 48     {
 49         cout << "立方體的面積:" << 2* m_L * m_W + 2 m_L * m_H + 2 m_W * m_H << endl;
 50     }
 51     //求立方體的體積
 52     void getCubeV()
 53     {
 54         cout << "立方體的體積:" << m_L * m_W * m_H << endl;
 55     }
 56     
 57     //通過成員函數判斷是否相等
 58     bool compareCubeByClass(Cube &cub1, Cube &cub2)
 59     {
 60         if(cub1.getL() == cub2.getL() && cub1.getW() == cub2.getW() && cub1.getH() == cub2.getH() )
 61         {
 62             return true;
 63         }
 64         return false;    
 65     }
 66 
 67 private:
 68     int m_L;//長
 69     int m_W;//寬
 70     int m_H;//高
 71 };
 72 
 73 //為什麼const剛剛不能添加?沒法保證成員函數裡是否修改了成員屬性
 74 void func(const Cube &cub)
 75 {
 76     cub.getL();
 77 }
 78 
 79 //全局函數判斷 兩個立方體是否相等
 80 bool compareCube(Cube &cub)
 81 {
 82     bool ret = m_L == cub.getL() && m_W == cub.getW() && m_H == cub.getH();
 83     return ret;
 84 }
 85 
 86 void test01()
 87 {
 88     Cube c1;
 89     c1.setL(10);
 90     c1.setW(10);
 91     c1.setH(10);
 92     
 93     c1.getCubeS();
 94     c1.getCubeV();
 95     
 96     //通過全局函數判斷兩個立方體是否相等
 97     
 98     Cube c2;
 99     c2.setL(10);
100     c2.setW(10);
101     c2.setH(10);
102     
103     bool ret = compareCube(c1, c2);
104     if(ret)
105     {
106         cout << "c1和c2是相等的!" << endl;
107     }
108     else
109     {
110         cout << "c1和c2是不相等的!" << endl;
111     }
112     
113     //通過成員函數判斷是否相等
114     bool ret2 = c1.compareCubeByClass(c2);
115     if(ret2)
116     {
117         cout << "c1和c2是相等的!" << endl;
118     }
119     else
120     {
121         cout << "c1和c2是不相等的!" << endl;
122     }
123 }
124 
125 int main()
126 {
127     test01();
128     
129     system("pause");
130     return EXIT_SUCCESS;
131 }      

練習2:點和圓的關系

設計一個圓形類(AdvCircle),和一個點類(Point),計算點和圓的關系。

假如圓心坐标為x0, y0, 半徑為r,點的坐标為x1, y1:

1)點在圓上:(x1-x0)*(x1-x0) + (y1-y0)*(y1-y0) == r*r

2)點在圓内:(x1-x0)*(x1-x0) + (y1-y0)*(y1-y0) < r*r

3)點在圓外:(x1-x0)*(x1-x0) + (y1-y0)*(y1-y0) > r*r

繼續閱讀