類的設計
C++對結構體是有增強的
可以包含函數作為結構體成員
可以直接定義變量
在結構體成員函數里面可以直接訪問結構體成員變量
struct student{string name;int age;float score;void play_game(const string &name);}void student::play_game(const string game){}int main(){}
在C++,如果一個類的成員被聲明為私有,那么它只能被該類內部的成員函數,友元函數或友元類訪問,如果成員不加修飾符則默認為私有
class 類名稱{public:private:protected:}
成員函數:在類中說明函數原型,并在函數名前使用類名::加以限定
也可以直接在類中給出函數體,形成內聯函數
允許聲明重載函數和帶默認參數的函數
protect(保護成員):只能被該類的成員函數和其派生類的成員函數訪問
struct和class的區別:
主要體現在默認訪問權限上,struct的成員默認為public,class成員默認為private
對象的創建
對象本質上是一塊內存,這塊內存中存放的是創建這個對象的類描述的數據
在函數內部,用類創建一個對象,這個對象就是棧上創建的對象
int main(){Student stu;return 0; }
在函數調用結束時棧上分配的內存會自動釋放,這個對象也就銷毀了
使用new'運算符可以在堆區開辟空間
在堆區開辟的空間,只需要把起始地址傳過來就可以
Student * pstu = new Student; //因為Student 的類型是Student ,所以 pstu的類型為 Student*.....delete pstu;
this指針
this是一個特殊的指針,指向類對象自身的首地址
每個類對象的非靜態成員函數都有一個this指針,指向調用成員函數對象的首地址
如果在成員函數中需要引用整個對象則用*this? 解引用
當成員函數的參數與成員變量同名時,可使用this區分
構造函數
作用 :給對象進行初始化
特征:名稱與類的名稱相同,且沒有返回值
class Student(){string name;float score;char gender;Student(string name,float score,char gender){this->name = name;//this是一個指針this->score = score;this->gender = gender;}}int main(){Student stu("小紅",88,'M'); }
如果沒寫構造函數,系統會默認提供一個無參的構造函數
函數名相同,參數不同,叫做函數的重載
class Student(){string name;float score;char gender;Student(string name,float score,char gender){this->name = name;//this是一個指針this->score = score;this->gender = gender;}Student(){}}int main(){Student stu;//調用的是無參的構造函數Student stu(name,score,gender);//調用的是有參的構造函數}