(三)C++中的靜態(tài)成員、this指針策菜、友元函數(shù)與運(yùn)算符重載

C++中的靜態(tài)成員與this指針

一晶疼、靜態(tài)成員

1酒贬、static 關(guān)鍵字

  • 靜態(tài)屬性只能在全局范圍內(nèi)進(jìn)行初始化賦值
  • 靜態(tài)方法可以直接通過類名進(jìn)行訪問又憨,也可以通過對(duì)象名進(jìn)行訪問
class Teacher {
private:
    char* name;
public:
    //計(jì)數(shù)器
    static int total;
public:
    Teacher(char* name) {
        this->name = name;
        cout << "Teacher有參構(gòu)造函數(shù)" << endl;
    }
    ~Teacher() {
        cout << "Teacher析構(gòu)函數(shù)" << endl;
    }
    void setName(char* name) {
        this->name = name;
    }
    char* getName() {
        return this->name;
    }
    //計(jì)數(shù)的靜態(tài)函數(shù)
    static void count(){
        total++;
        cout << "total:" << total << endl;
    }
};

//靜態(tài)屬性初始化賦值
int Teacher::total = 10;

void main() {
    Teacher::total++;
    cout << Teacher::total << endl;
    //直接通過類名訪問
    Teacher::count();
    cout << Teacher::total << endl;
    //通過對(duì)象名訪問
    Teacher t1((char*)"JACK");
    t1.count();
    cout << Teacher::total << endl;
    getchar();
}

二翠霍、類的大小

C/C++ 內(nèi)存分區(qū):棧、堆蠢莺、全局(靜態(tài)寒匙、全局)、常量區(qū)(字符串)躏将、程序代碼區(qū)
普通屬性與結(jié)構(gòu)體具有相同的內(nèi)存布局

class A {
public:
    int i;
    int j;
    int k;
};

class B {
public:
    int i;
    int j;
    int k;
    void myprint() {
        cout << "打印" << endl;
    }

};

void main() {
    cout << sizeof(A) << endl;
    cout << sizeof(B) << endl;
    getchar();
}

三锄弱、this 指針

1、this指針

this 是當(dāng)前對(duì)象的指針
因?yàn)楹瘮?shù)是共享的祸憋,所有使用this指針用來標(biāo)識(shí)當(dāng)前對(duì)象

class Teacher {
private:
    char* name;
    int age;
public:
    Teacher(char* name,int age) {
        this->name = name;
        this->age = age;
        cout << "Teacher有參構(gòu)造函數(shù)" << endl;
    }
    ~Teacher() {
        cout << "Teacher析構(gòu)函數(shù)" << endl;
    }
    void setName(char* name) {
        this->name = name;
    }
    char* getName() {
        return this->name;
    }
    void setAge(int age) {
        this->age = age;
    }
    int getAge() {
        return this->age;
    }
    void myprint() {
        cout << this->getName() << "," << this->getAge() << endl;
    }
};


void main() {
    Teacher t1((char*)"Jack", 20);
    Teacher t2((char*)"Rose", 18);
    t1.myprint();
    t2.myprint();
    getchar();
}

2会宪、常函數(shù)(const修飾函數(shù))

常函數(shù),修飾的是this蚯窥;既不能改變指針的值掸鹅,也不能改變指針指向的內(nèi)容
常量對(duì)象只能調(diào)用常量函數(shù),不能調(diào)用非常量函數(shù)
常函數(shù)當(dāng)前對(duì)象不能被修改,防止數(shù)據(jù)成員被非法訪問

class Teacher {
private:
    char* name;
    int age;
public:
    Teacher(char* name,int age) {
        this->name = name;
        this->age = age;
        cout << "Teacher有參構(gòu)造函數(shù)" << endl;
    }
    ~Teacher() {
        cout << "Teacher析構(gòu)函數(shù)" << endl;
    }
    void setName(char* name) {
        this->name = name;
    }
    char* getName() {
        return this->name;
    }
    void setAge(int age) {
        this->age = age;
    }
    int getAge() {
        return this->age;
    }
    void myprint() const {
        printf("%#x\n",this);
        //不能改變屬性的值
        //this->name = "Jason";
        //不能改變this指針的值
        //this = (Teacher*)0x000090;
        cout << this->getName() << "," << this->getAge() << endl;
    }
};

四拦赠、友元函數(shù)與友元類

1巍沙、友元函數(shù)

在友元函數(shù)中可以訪問私有的屬性

class A {
private:
    int i;
public:
    A(int i) {
        this->i = i;
    }
    void myprint() {
        cout << i << endl;
    }
    //友元函數(shù)
    friend void modify_i(A*p, int a);
};

//友元函數(shù)的實(shí)現(xiàn),在友元函數(shù)中可以訪問私有的屬性
void modify_i(A*p, int a) {
    p->i = a;
}

void main() {
    A* a = new A(10);
    a->myprint();
    modify_i(a, 20);
    a->myprint();
    getchar();
}

2、友元類

友元類可以訪問引用友元類的類的任何成員

class A {
    //友元類
    friend class B;
private:
    int i;
public:
    A(int i) {
        this->i = i;
    }
    void myprint() {
        cout << i << endl;
    }
    //友元函數(shù)
    friend void modify_i(A*p, int a);
};

//友元函數(shù)的實(shí)現(xiàn),在友元函數(shù)中可以訪問私有的屬性
void modify_i(A*p, int a) {
    p->i = a;
}

class B {
private:
    A a;
public:
    B(int a_i):a(a_i) {
        this->a = a;
    }
    //B這個(gè)友元類可以訪問A類的任何成員
    void accessAny() {
        a.i = 30;
    }
    A getA() {
        return a;
    }
};

void main() {
    B* b = new B(10);
    A a = b->getA();
    a.myprint();
    b->accessAny();
    a = b->getA();
    a.myprint();
    getchar();
}

五荷鼠、運(yùn)算符重載

運(yùn)算符的重載句携,本質(zhì)上還是函數(shù)的調(diào)用

1、單獨(dú)進(jìn)行運(yùn)算符重載

class Point {
public:
    int x;
    int y;
public:
    Point(int x = 0,int y = 0) {
        this->x = x;
        this->y = y;
    }

    void myprint() {
        cout << x << "," << y << endl;
    }
};
//重載+號(hào)
Point operator+(Point &p1, Point &p2) {
    Point tmp(p1.x + p2.x, p1.y + p2.y);
    return tmp;
}

//重載-號(hào)
Point operator-(Point &p1, Point &p2) {
    Point tmp(p1.x - p2.x, p1.y - p2.y);
    return tmp;
}

void main() {
    Point p1(10,20);
    Point p2(20,10);
    Point p3 = p1 + p2;
    p3.myprint();
    getchar();
}

2允乐、類成員函數(shù)運(yùn)算符重載

class Point {
public:
    int x;
    int y;
public:
    Point(int x = 0, int y = 0) {
        this->x = x;
        this->y = y;
    }

    void myprint() {
        cout << x << "," << y << endl;
    }
    //成員函數(shù)運(yùn)算符重載+號(hào)
    Point operator+(Point &p2) {
        Point tmp(this->x + p2.x, this->y + p2.y);
        return tmp;
    }

    //成員函數(shù)運(yùn)算符重載-號(hào)
    Point operator-(Point &p2) {
        Point tmp(this->x - p2.x, this->y - p2.y);
        return tmp;
    }
};


void main() {
    Point p1(10, 20);
    Point p2(20, 10);
    //p1.operator+(p1);
    Point p3 = p1 + p2;
    p3.myprint();
    getchar();
}

3矮嫉、友元函數(shù)運(yùn)算符重載

當(dāng)屬性私有時(shí),通過友元函數(shù)完成運(yùn)算符重載

class Point {
    friend Point operator+(Point &p1, Point &p2);
    friend Point operator-(Point &p1, Point &p2);
private:
    int x;
    int y;
public:
    Point(int x = 0, int y = 0) {
        this->x = x;
        this->y = y;
    }

    void myprint() {
        cout << x << "," << y << endl;
    }
    
};

//友元函數(shù)運(yùn)算符重載+號(hào)
Point operator+(Point &p1, Point &p2) {
    Point tmp(p1.x + p2.x, p1.y + p2.y);
    return tmp;
}

//友元函數(shù)運(yùn)算符重載-號(hào)
Point operator-(Point &p1, Point &p2) {
    Point tmp(p1.x - p2.x, p1.y - p2.y);
    return tmp;
}

void main() {
    Point p1(10, 20);
    Point p2(20, 10);
    Point p3 = p1 + p2;
    p3.myprint();
    getchar();
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末牍疏,一起剝皮案震驚了整個(gè)濱河市敞临,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌麸澜,老刑警劉巖挺尿,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異炊邦,居然都是意外死亡编矾,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門馁害,熙熙樓的掌柜王于貴愁眉苦臉地迎上來窄俏,“玉大人,你說我怎么就攤上這事碘菜“简冢” “怎么了限寞?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長仰坦。 經(jīng)常有香客問我履植,道長,這世上最難降的妖魔是什么悄晃? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任玫霎,我火速辦了婚禮,結(jié)果婚禮上妈橄,老公的妹妹穿的比我還像新娘庶近。我一直安慰自己,他們只是感情好眷蚓,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布鼻种。 她就那樣靜靜地躺著,像睡著了一般沙热。 火紅的嫁衣襯著肌膚如雪叉钥。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天校读,我揣著相機(jī)與錄音沼侣,去河邊找鬼。 笑死歉秫,一個(gè)胖子當(dāng)著我的面吹牛蛾洛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播雁芙,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼轧膘,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了兔甘?” 一聲冷哼從身側(cè)響起谎碍,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎洞焙,沒想到半個(gè)月后蟆淀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡澡匪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年熔任,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片唁情。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡疑苔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出甸鸟,到底是詐尸還是另有隱情惦费,我是刑警寧澤兵迅,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站薪贫,受9級(jí)特大地震影響恍箭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜后雷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一季惯、第九天 我趴在偏房一處隱蔽的房頂上張望吠各。 院中可真熱鬧臀突,春花似錦、人聲如沸贾漏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽纵散。三九已至梳码,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間伍掀,已是汗流浹背掰茶。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蜜笤,地道東北人濒蒋。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像把兔,于是被迫代替她去往敵國和親沪伙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容