1.class是struct的擴展,它包括數據成員和成員函數。
2.在C++中,有三種訪問權限:
(1)private:默認,只供類內部的函數使用。
(2)public:類外的程序可以使用。
(3)proteted
注意:
C++的規范,類名稱的首字母應該大寫。
eg:
1 #include <stdio.h>
2
3 class Person{
4 private: //private只供類內部的函數使用,改為public程序可以正確輸出結果。
5 char *name;
6 int age;
7 char *work;
8
9 void printfInfo(void)
10 {
11 printf("name=%s,age=%d,work=%s\n",name,age,work);
12 }
13 };
14 int main(int argc,char **argv)
15 {
16 Person per;
17 per.name="zhangsan";
18 per.age=20;
19 per.work="teacher";
20
21 per.printfInfo();
22
23 return 0;
24 }
出現錯誤:
3.通過函數來訪問class中的私有變量。
eg:
1 #include <stdio.h>
2
3 class Person{
4 private: //private只供類內部的函數使用
5 char *name;
6 int age;
7 char *work;
8 public:
9 void setName(char *n,int a,char *w){
10 name=n;
11 age=a;
12 work=w;
13 }
14 void printfInfo(void)
15 {
16 printf("name=%s,age=%d,work=%s\n",name,age,work);
17 }
18 };
19 int main(int argc,char **argv)
20 {
21 Person per;
22 // per.name="zhangsan";
23 // per.age=20;
24 // per.work="teacher";
25 per.setName("zhangsan",20,"teacher");
26 per.printfInfo();
27
28 return 0;
29 }

4.為什麼要把變量設置為private?
因為如果是public,在外部的函數,比如main函數可以隨意地設置它的值,即使是不合理的值。這顯然不是一個好的現象,為了避免用戶做出的錯誤的設置,應該把class的變量設置為私有的,在提供函數來設置這些變量。
eg:
1 #include <stdio.h>
2
3 class Person{
4 private: //private只供類內部的函數使用
5 char *name;
6 int age;
7 char *work;
8 public:
9 void setName(char *n,int a,char *w){
10 name=n;
11 work=w;
12 age=a;
13 if(a<0||a>150){
14 age=0;
15 }
16
17
18 }
19 void printfInfo(void)
20 {
21 printf("name=%s,age=%d,work=%s\n",name,age,work);
22 }
23 };
24 int main(int argc,char **argv)
25 {
26 Person per;
27 // per.name="zhangsan";
28 // per.age=20;
29 // per.work="teacher";
30 per.setName("zhangsan",20,"teacher");
31 per.printfInfo();
32
33 return 0;
34 }
結果:

改變第30行的參數“20”改為“200”
結果如下:

注意:age的值為0,是因為13行的判斷語句起的作用。
5.Person per;
我們已經將Person定義為一個class類,那麼成per是Person這個類的一個對象。
6.C++中的this指針,指向當前對象。
eg:
1 #include <stdio.h>
2
3 class Person{
4 private: //private只供類內部的函數使用
5 char *name;
6 int age;
7 char *work;
8 public:
9 void setName(char *name,int age,char *work){
10 this->name=name; //這裡的name,age,work代表的是setName函數傳遞進來的參數,而不是class中的變量,因為在c語言和C++中的就近原則。
11 this->work=work;
12 this->age=age;
13 if(age<0||age>150){
14 this->age=0;
15 }
16
17
18 }
19 void printfInfo(void)
20 {
21 printf("name=%s,age=%d,work=%s\n",name,age,work);
22 }
23 };
24 int main(int argc,char **argv)
25 {
26 Person per;
27 // per.name="zhangsan";
28 // per.age=20;
29 // per.work="teacher";
30 per.setName("zhangsan",200,"teacher");
31 per.printfInfo();
32
33 return 0;
34 }