最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++中的對象指針總結(jié)

 更新時間:2013年10月16日 08:44:08   作者:  
以下是對C++中的對象指針進(jìn)行了詳細(xì)的總結(jié)介紹,需要的朋友可以過來參考下,希望對大家有所幫助

指向?qū)ο蟮闹羔?BR>在建立對象的時候,變異系統(tǒng)會給每一個對象分配一定的存儲空間,以存放其成員。
對象空間的起始地址就是對象的指針??梢远x一個指針變量,用來存放對象的指針。

一個簡單的示例1.1:

復(fù)制代碼 代碼如下:

#include<iostream>
using namespace std;
class Student
{
 public:
  int num;
  int score;
  Student(int ,int );//聲明構(gòu)造函數(shù)
  void Print();//聲明輸出信息函數(shù)
};
Student::Student(int n,int s)
{
 num=n;
 score=s;
}
void Student::Print(){
 cout<<num<<"\t"<<score<<endl;
}
int main(){
 Student stud(1,100);//實例化一個對象
 Student *p=&stud;//定義一個指向?qū)ο蟮闹羔槪⑹褂脤ο髎tud的地址初始化
 cout<<"*p.num:"<<(*p).num<<endl;//使用指向?qū)ο蟮闹羔樥{(diào)用數(shù)據(jù)成員的方式一
 cout<<"p->score:"<<p->score<<endl;//使用指向?qū)ο蟮闹羔樥{(diào)用數(shù)據(jù)成員的方式二
 (*p).Print();
 p->Print();
 return 0;
}



指向?qū)ο蟪蓡T的指針
對象有地址,存放對象初始地址的指針變量就是指向?qū)ο蟮闹羔樧兞俊?BR>對象中的成員也有地址,存放對象成員地址的指針變量就是指向?qū)ο蟪蓡T的指針變量。

1.指向?qū)ο髷?shù)據(jù)成員的指針
定義指向?qū)ο髷?shù)據(jù)成員的方法和定義指向普通變量的方法相同:
數(shù)據(jù)類型    *    指針變量名

復(fù)制代碼 代碼如下:

p=&t1.hour;//將對象t1的數(shù)據(jù)成員hour的地址賦給p,p指向t1.hour
cout<<*p<<endl;//輸出t1.hour的值

2.指向?qū)ο蟪蓡T函數(shù)的指針
定義指向成員函數(shù)的指針和定義指向普通函數(shù)的指針的方法是不同的。

定義指向普通函數(shù)的指針的方法是這樣的:
數(shù)據(jù)類型名(* 指針變量名)(參數(shù)列表);
如:

復(fù)制代碼 代碼如下:

void  (*p)(int n,int m);//p是指向void型函數(shù)的指針變量
p=fun;//將fun函數(shù)的入口地址賦給指針變量p,p就指向了函數(shù)fun
(*p)(a,b);//調(diào)用fun函數(shù),其中,a,b是實參

而定義一個指向?qū)ο蟪蓡T函數(shù)的指針變量則比較復(fù)雜一些。
如果我們直接按照上面的方法定義指針變量,將對象成員函數(shù)名賦給指針變量p:
復(fù)制代碼 代碼如下:

void (*p)();        
p=t1.Print();

編譯會出現(xiàn)錯誤
成員函數(shù)與普通函數(shù)的一個最根本區(qū)別:它是類中的一個成員。
編譯系統(tǒng)要求上面的復(fù)制語句中,指針變量的類型必須與賦值號右側(cè)函數(shù)的類型相匹配,要求在一下3個方面要匹配:
1.函數(shù)參數(shù)的類型和參數(shù)個數(shù)
2.函數(shù)返回值的類型
3.所屬的類
前兩個是匹配的,而第三點不匹配。
指針變量p與類無關(guān),而Print()卻屬于Student類。

要定義指向成員函數(shù)的指針變量應(yīng)該采用以下形式:

復(fù)制代碼 代碼如下:

void (Student::*p)();//定義p為指向Student類中公共成員函數(shù)的指針變量

數(shù)據(jù)類型名(類名::*指針變量名)(參數(shù)表列);

我們知道,所有的Student類實例化得到的對象都是公用一個成員函數(shù)的,所以我們沒有必要指定它是指向那個對象的成員函數(shù)的指針,我們只需要定義它是指向該類的成員函數(shù)就可以了。

使指針變量指向一個公用成員函數(shù)的一般形式為:

復(fù)制代碼 代碼如下:

p=&Student::Print;

指針變量名=&類名::成員函數(shù)名;

在使用時,仍然需要將指針放到具體的對象中使用,(*p)的作用等價于Print()

復(fù)制代碼 代碼如下:

stud.(*p);//作用與stud.Print()的作用等價

=================一個使用對象指針的例子1.2===========
復(fù)制代碼 代碼如下:

#include<iostream>
using namespace std;
class Student
{
 public:
  int num;
  int score;
  Student(int ,int );
  void Print();
};
Student::Student(int n,int s)
{
 num=n;
 score=s;
}
void Student::Print(){
 cout<<num<<"\t"<<score<<endl;
}
int main(){
 Student stud(1,100);
 cout<<"stud.Print()"<<endl;
        stud.Print();//直接調(diào)用對象stud的成員函數(shù)Print();
 Student *p_class=&stud;//定義指向?qū)ο髎tud的指針;
 cout<<"p_class->Print()"<<endl;
 p_class->Print();//通過指向?qū)ο蟮闹羔樥{(diào)用成員函數(shù)Print();
 void (Student::*p_fun)();//聲明p_fun是指向Student中的函數(shù)的指針
 p_fun=&Student::Print;//是p_fun指向Student類公用成員函數(shù)Print()
 cout<<"(stud.*p_fun)()"<<endl;
 (stud.*p_fun)();//調(diào)用對象stud中的p_fun所指向的成員函數(shù)(即:stud.Print)
 return 0;
}

this指針
每個對象中的數(shù)據(jù)成員都分別占用存儲空間,如果對同一個類定義了n個對象,則有n組同樣大小的空間一存放n個對象中的數(shù)據(jù)成員。
單數(shù)不同的對象都調(diào)用同一段函數(shù)代碼段。
那么,當(dāng)不同對象的成員函數(shù)引用數(shù)據(jù)成員時,怎么能保證引用的是所制定的對象的數(shù)據(jù)成員呢?
實際上,在每一個成員函數(shù)中,都包含一個特殊的指針,這個指針的名字是固定的,稱為this指針。
它是指向本類對象的指針,它的值是當(dāng)前被調(diào)用的成員函數(shù)所在的對象的起始地址。

例如:
Print()函數(shù)中

復(fù)制代碼 代碼如下:

 cout<<num<<"\t"<<score<<endl;

實際上是
復(fù)制代碼 代碼如下:

 cout<<this->num<<"\t"<<this->score<<endl;

this指針式隱式使用的,它是作為參數(shù)被傳遞給成員函數(shù)。
在程序中的函數(shù):
復(fù)制代碼 代碼如下:

void Student::Print(){
 cout<<num<<"\t"<<score<<endl;
}

C++編譯系統(tǒng)會自動處理成:
復(fù)制代碼 代碼如下:

void Student::Print(Student *this){
 cout<<this->num<<"\t"<<this->score<<endl;
}

即在成員函數(shù)的形參表列中增加一個this指針。在調(diào)用成員函數(shù)stud.Print()時,實際上是用以下方式調(diào)用的:
復(fù)制代碼 代碼如下:

stud.Print(&stud);

相關(guān)文章

  • C++中繼承與多態(tài)的基礎(chǔ)虛函數(shù)類詳解

    C++中繼承與多態(tài)的基礎(chǔ)虛函數(shù)類詳解

    這篇文章主要給大家介紹了關(guān)于C++中繼承與多態(tài)的基礎(chǔ)虛函數(shù)類的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09
  • C++實現(xiàn)LeetCode(160.求兩個鏈表的交點)

    C++實現(xiàn)LeetCode(160.求兩個鏈表的交點)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(160.求兩個鏈表的交點),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C語言掃雷游戲的簡單實現(xiàn)

    C語言掃雷游戲的簡單實現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了C語言掃雷游戲的簡單實現(xiàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • C++中const修飾符的詳解及其作用介紹

    C++中const修飾符的詳解及其作用介紹

    這篇文章主要介紹了C++中const修飾符的詳解及其作用介紹,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • C語言實現(xiàn)找出二叉樹中某個值的所有路徑的方法

    C語言實現(xiàn)找出二叉樹中某個值的所有路徑的方法

    這篇文章主要介紹了C語言實現(xiàn)找出二叉樹中某個值的所有路徑的方法,針對數(shù)據(jù)結(jié)構(gòu)中二叉樹的實用操作技巧,需要的朋友可以參考下
    2014-09-09
  • 基于C++11實現(xiàn)手寫線程池的示例代碼

    基于C++11實現(xiàn)手寫線程池的示例代碼

    在實際的項目中,使用線程池是非常廣泛的,本文主要介紹了基于C++11實現(xiàn)手寫線程池的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • c++中std::placeholders的使用方法

    c++中std::placeholders的使用方法

    std::placeholders?是 C++ 標(biāo)準(zhǔn)庫中的一個工具,用于在函數(shù)對象綁定時創(chuàng)建占位符,本文就來詳細(xì)的介紹一下,具有一定的參考價值,感興趣的可以了解一下
    2025-02-02
  • 紅黑樹的使用詳解

    紅黑樹的使用詳解

    本篇文章是對紅黑樹的使用詳解。需要的朋友參考下
    2013-05-05
  • C語言實現(xiàn)Fibonacci數(shù)列遞歸

    C語言實現(xiàn)Fibonacci數(shù)列遞歸

    這篇文章主要介紹了C語言實現(xiàn)Fibonacci數(shù)列遞歸,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • C語言刪除輸入字符串中的空格示例代碼

    C語言刪除輸入字符串中的空格示例代碼

    最近工作中遇到了需求,要刪除字符串中的所有空格,就要篩選出空格字符,這篇文章主要給大家介紹了關(guān)于利用C語言刪除輸入字符串中的空格的相關(guān)資料,需要的朋友可以參考下
    2022-12-12

最新評論

花莲市| 武宣县| 焦作市| 文水县| 巴林左旗| 盘锦市| 石台县| 井研县| 韩城市| 平顶山市| 平乡县| 满洲里市| 若尔盖县| 密山市| 泰来县| 临安市| 桑植县| 凤冈县| 贺州市| 石渠县| 江津市| 邻水| 石河子市| 桐庐县| 齐齐哈尔市| 沁源县| 上虞市| 神池县| 宣化县| 金秀| 万宁市| 衡山县| 本溪市| 社旗县| 鄂州市| 讷河市| 张掖市| 阳新县| 东乡族自治县| 岳西县| 缙云县|