在學習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