因為要自學(xué)cocos2d-x, 自己選的方向就是采用C++, 所以記錄一下:
C++ 讀作”C加加“,是”C Plus Plus“的簡稱解阅。顧名思義钉寝,C++是在C語言的基礎(chǔ)上增加新特性.
C++ 主要在C語言的基礎(chǔ)上增加了面向?qū)ο蟮臋C(jī)制蔬芥,以適用于大中型軟件的編寫。
在C語言中冒签,我們會把重復(fù)使用或具有某項功能的代碼封裝成一個函數(shù)躲株,將具有相似功能的函數(shù)放在一個源文件;調(diào)用函數(shù)時镣衡,引入對應(yīng)的頭文件就可以霜定。
而在C++中档悠,多了一層封裝,就是類(Class)望浩。類由一組相關(guān)聯(lián)的函數(shù)辖所、變量組成。你可以將一個類或多個類放在一個源文件磨德,使用時引入對應(yīng)的類就可以缘回。
面向?qū)ο缶幊?(OOP , Object Oriented Programming)
C語言源文件后綴為.c
C++源文件后綴為.cpp
C/C++ 使用相同的編譯器,Windows 下一般是微軟的 cl.exe典挑,
Linux 下一般是 GCC酥宴。
C++幾乎完全兼容C語言,它們類似子集(C語言)和超集(C++)的概念您觉。不過C語言和C++的編譯方式不同拙寡,.c 源文件會按照C語言的方式編譯,.cpp 源文件會按照C++的方式編譯琳水。
《類和對象》
1肆糕、C++是一門面向?qū)ο蟮木幊陶Z言,理解C++在孝,首先要理解類與對象這兩個概念诚啃。
2、C++中的類可以看做C語言中結(jié)構(gòu)體(Struct)的升級版私沮。結(jié)構(gòu)體是一種構(gòu)造數(shù)據(jù)類型始赎,可以包含若干成員(變量),每個成員的數(shù)據(jù)類型可以不一樣仔燕;可以通過結(jié)構(gòu)體來定義結(jié)構(gòu)體變量极阅,每個變量擁有相同的性質(zhì)。例如:
下面的是C 語言的寫法:
#include <stdio.h>
int main(){
// 定義結(jié)構(gòu)體 Student
struct Student{
// 結(jié)構(gòu)體包含的變量
char *name;
int age;
float score;
};
// 通過結(jié)構(gòu)體來定義變量
struct Student stu1;
// 操作結(jié)構(gòu)體的成員
stu1.name = "小小";
stu1.age = 6;
stu1.score = 98.5;
printf("%s的年齡是 %d涨享,成績是 %f\n", stu1.name, stu1.age, stu1.score);
return 0;
}
3筋搏、C++中的類也是一種構(gòu)造數(shù)據(jù)類型,但是進(jìn)行了一些擴(kuò)展厕隧,類的成員不但可以是變量奔脐,還可以是函數(shù);通過類定義出來的變量也有特定的稱呼吁讨,叫做“對象”髓迎。例如:
#include <stdio.h>
int main(){
//通過class關(guān)鍵字類定義類
class Student{
public: //類包含的變量
char *name;
int age;
float score;
public: //類包含的函數(shù)
void Study(){
printf("%s的年齡是 %d,成績是 %f\n", name, age, score);
}
};
//通過類來定義變量建丧,即創(chuàng)建對象
class Student stu1; //也可以省略關(guān)鍵字class
//操作類的成員
stu1.name = "小小";
stu1.age = 6;
stu1.score = 98.5;
stu1.Study();
return 0;
}
總結(jié):
1排龄、 上面的C 和 C++的運(yùn)行結(jié)果是一致的。
2翎朱、class 是C++中的關(guān)鍵字橄维,用來聲明一個類尺铣。
3、public 也是一個關(guān)鍵字争舞,表示后面的成員都是公有的凛忿;
4、所謂公有竞川,就是通過當(dāng)前類創(chuàng)建的對象都可以訪問這些成員店溢。除了 public 還有 private,它表示私有的委乌,也就是對象都不能訪問這些成員床牧。
5、在C語言中遭贸,通過"結(jié)構(gòu)體名"完成結(jié)構(gòu)體變量的定義戈咳;
在C++中,通過"類名"完成對象的定義革砸。結(jié)構(gòu)體變量和對象被定義后會立即分配內(nèi)存空間除秀。(要注意內(nèi)存管理)
.
擴(kuò)展:
類是創(chuàng)建對象的模板糯累,一個類可以創(chuàng)建多個對象算利,每個對象都是類類型的一個變量;創(chuàng)建對象的過程也叫類的實例化泳姐。每個對象都是類的一個具體實例(Instance)效拭,擁有類的成員變量和成員函數(shù)。
與結(jié)構(gòu)體一樣胖秒,類只是一種復(fù)雜數(shù)據(jù)類型的聲明缎患,不占用內(nèi)存空間。而對象是類這種數(shù)據(jù)類型的一個變量阎肝,占用內(nèi)存空間挤渔。
在定義類的對象時,class 關(guān)鍵字可要可不要风题。但出于習(xí)慣我們通常都會省略掉class關(guān)鍵字判导,例如:
class Student LiLei; //正確
Student LiLei; //同樣正確
創(chuàng)建類的對象時,除了能定義單個變量以外沛硅,還可以定義一個數(shù)組或者指針眼刃。例如:
Student all_student[100];
Student *pointer;
下面是解惑:先看看代碼
#include <stdio.h>
//類可以在所有函數(shù)之外定義
class Student{
public: //類包含的變量
char *name;
int age;
float score;
public: //類包含的函數(shù)
void say(){
printf("%s的年齡是 %d,成績是 %f\n", name, age, score);
}
};
int main(){
//創(chuàng)建對象
Student stu;
stu.name = "小明";
stu.age = 15;
stu.score = 98.5;
stu.say();
//定義指針
Student *pt_stu = &stu;
pt_stu->name = "李四";
pt_stu->age = 16;
pt_stu->score = 80;
pt_stu->say();
return 0;
}
1摇肌、疑惑:為啥有些是使用 “ . ”, 例如 stu.name = "小明";有些使用 stu->name = "李四"; 為啥使用“ -> ” ?
答:上面和結(jié)構(gòu)體(struct)類似擂红,一個對象通過成員選擇符” . “來訪問成員變量和成員函數(shù),而指針變量通過指針操作符”->“來訪問成員
注意:對象指針指向的是一個具體的對象围小,而不是類昵骤。下面的寫法是錯誤的:
Student *pt;
pt = &Student; //類
類成員的訪問權(quán)限
C++通過 public树碱、protected、private 三個關(guān)鍵字來控制成員變量和成員函數(shù)的訪問權(quán)限涉茧,它們分別表示公有的赴恨、受保護(hù)的、私有的伴栓,被稱為成員訪問限定符伦连。所謂訪問權(quán)限,就是你能不能使用該類中的成員钳垮。
注意:
Java惑淳、C# 程序員注意,C++ 中的 public饺窿、private歧焦、protected 只能修飾類的成員,不能修飾類肚医,C++中的類沒有共有私有之分绢馍。
訪問權(quán)限需要分兩部分說明:類內(nèi)和類外。
.
a.在類內(nèi)部肠套,無論成員變量或成員函數(shù)被聲明為 public舰涌、protected 還是 private,都是可以互相訪問的你稚,無訪問權(quán)限限制瓷耙。
b.在類外部,通過對象無法訪問 private刁赖、protected 屬性的成員變量和成員函數(shù)搁痛,而僅可以訪問 public 屬性的成員變量和成員函數(shù)。