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 }