C++之類與對象(3)

來源:互聯網
上載者:User

  在上篇的最後的執行個體程式碼中,我所寫的成員函數中的參數變數名和資料成員名一樣,為了編譯時間不發生錯誤,我在資料成員的前面加上"類名::"以區分。其實還有另外一種方法可以來加以區分,那就是C++中的自引用指標this。今天就講一下C++中的this以及string類。可能代碼不會很多,但突出原理;

  1.this這個關鍵字其實對於我來說並不陌生,在C#中就常用到。但今天我想說說為什麼要有this,this起到什麼作用?話還是要從類和對象說起,大家都知道定義一個對象,系統要給該對象分配儲存空間,如果該類包含了資料成員和成員函數,就要分別給資料和函數的代碼分配儲存空間。按照正常額思路,如果類定義了2個對象,那麼就應該分別給這2個對象的資料和函數分配空間。但事實並非如此,C++的編譯系統只用了一段空間來存放在各個共同的函數程式碼片段,在調用各個對象的成員函數時,都與調用這個公用的函數代碼。因此,每個對象的儲存空間都只是該對象資料成員所佔用的儲存空間,而不包括成員函數代碼所佔有的空間,函數代碼是儲存在對象空間之外的。但是問題就出來了,既然所有對象所調用的成員函數代碼只是單獨一封,那麼成員函數是怎麼知道當前調用自己的是哪一個對象呢?

  這時就誕生了this這個玩意,它是一個自引用的指標。每當建立一個對象時,系統就把this指標初始化為指向該對象,即this指標的值為當前調用成員函數的對象的起始地址。每當調用一個成員函數時,系統就把this指標作為一個隱含的參數傳給該函數。不同的對象調用同一個成員函數時,C++編譯器將根據成員函數的this指標所指向的對象來確定應該調用哪一個對象的資料成員。通過下面一個簡單一實例就可說明。

 1 #include "stdafx.h"
2 #include <iostream>
3 #include <string>
4
5
6 class Num
7 {
8 private:
9 int a;
10 std::string objectName;
11 public:
12 Num(std::string objectName,int a);
13 void showNum();
14 };
15
16 Num::Num(std::string objectName,int a)
17 {
18 this->objectName=objectName;
19 this->a=a;
20 }
21
22 void Num::showNum()
23 {
24 std::cout<<this->objectName<<":this="<<this<<" a="<<this->a<<std::endl;
25 }
26
27
28 int main()
29 {
30 Num num1("num1",1);
31 Num num2("num2",2);
32 Num num3("num3",3);
33
34 num1.showNum();
35 num2.showNum();
36 num3.showNum();
37
38 return0;
39 }

結果:

  2.在前幾篇的代碼中,我都是用Char *字串指標來定義字元變數,還有就是在上一篇中的Kid類中的建構函式,用到過字元數組。並用字元複製函數strcpy,從中出現了問題,後來在博友的協助下解決了。strcpy、strcat(字串串連)和字串長度(strlen),都是C中標準庫函數的字串操作。C++保留了這種格式,但是這種方法使用起來不太方便,另外資料與處理資料的函數相分離也不符合物件導向的思想。於是C++的標準庫中,就出現了字串類string。在使用string類型時,要在標頭檔中加入#include<string>;string的用法我在上述的例子中也有用到。在比如:string str("Hello C++")或string str="Hello C++";同時,也可以在運算式中把string對象和以'\0'結束符混在一起使用。

  3.最後來列個表說明一下string中常用的運算子:

  

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.