亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++中的對象指針總結

2020-01-26 15:44:20
字體:
來源:轉載
供稿:網友

指向對象的指針
在建立對象的時候,變異系統會給每一個對象分配一定的存儲空間,以存放其成員。
對象空間的起始地址就是對象的指針??梢远x一個指針變量,用來存放對象的指針。

一個簡單的示例1.1:

復制代碼 代碼如下:

#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);//實例化一個對象
 Student *p=&stud;//定義一個指向對象的指針,并使用對象stud的地址初始化
 cout<<"*p.num:"<<(*p).num<<endl;//使用指向對象的指針調用數據成員的方式一
 cout<<"p->score:"<<p->score<<endl;//使用指向對象的指針調用數據成員的方式二
 (*p).Print();
 p->Print();
 return 0;
}



指向對象成員的指針
對象有地址,存放對象初始地址的指針變量就是指向對象的指針變量。
對象中的成員也有地址,存放對象成員地址的指針變量就是指向對象成員的指針變量。

1.指向對象數據成員的指針
定義指向對象數據成員的方法和定義指向普通變量的方法相同:
數據類型    *    指針變量名

復制代碼 代碼如下:

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

2.指向對象成員函數的指針
定義指向成員函數的指針和定義指向普通函數的指針的方法是不同的。

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

復制代碼 代碼如下:

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

而定義一個指向對象成員函數的指針變量則比較復雜一些。
如果我們直接按照上面的方法定義指針變量,將對象成員函數名賦給指針變量p:
復制代碼 代碼如下:

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

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

要定義指向成員函數的指針變量應該采用以下形式:

復制代碼 代碼如下:

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

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

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

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

復制代碼 代碼如下:

p=&Student::Print;

指針變量名=&類名::成員函數名;

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

復制代碼 代碼如下:

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

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

#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();//直接調用對象stud的成員函數Print();
 Student *p_class=&stud;//定義指向對象stud的指針;
 cout<<"p_class->Print()"<<endl;
 p_class->Print();//通過指向對象的指針調用成員函數Print();
 void (Student::*p_fun)();//聲明p_fun是指向Student中的函數的指針
 p_fun=&Student::Print;//是p_fun指向Student類公用成員函數Print()
 cout<<"(stud.*p_fun)()"<<endl;
 (stud.*p_fun)();//調用對象stud中的p_fun所指向的成員函數(即:stud.Print)
 return 0;
}

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

例如:
Print()函數中

復制代碼 代碼如下:

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

實際上是
復制代碼 代碼如下:

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

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

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

C++編譯系統會自動處理成:
復制代碼 代碼如下:

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

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

stud.Print(&stud);

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
九九热最新视频//这里只有精品| 97碰碰碰免费色视频| 国产精品久久久久久久7电影| www.亚洲一区| 欧美成人国产va精品日本一级| 久久综合免费视频影院| 97在线视频一区| 日韩av成人在线| 亚洲视频在线观看网站| 亚洲最大中文字幕| 97精品国产97久久久久久春色| 久久国产精品久久久久久久久久| 国产免费一区二区三区香蕉精| 在线观看日韩专区| 一区二区在线免费视频| 上原亚衣av一区二区三区| 日韩经典一区二区三区| 精品无人国产偷自产在线| 国产成人一区三区| 亚洲人免费视频| 日韩精品免费观看| 美乳少妇欧美精品| 国产丝袜视频一区| 九九九久久国产免费| 国产视频丨精品|在线观看| 国产一区二区在线免费| 久久精品成人欧美大片古装| 亚洲人成网在线播放| 8090成年在线看片午夜| 亚洲人精选亚洲人成在线| 欧美福利小视频| 日韩美女免费线视频| 成人免费在线视频网址| 亚洲免费高清视频| 性欧美xxxx| 久久久精品免费| 高清欧美一区二区三区| 欧美精品在线免费| 久久视频免费在线播放| 欧美日韩不卡合集视频| 黑人狂躁日本妞一区二区三区| 国产精品精品久久久久久| 亚洲专区中文字幕| 日韩中文字幕网| 国产精品自产拍在线观看| 欧美成人亚洲成人日韩成人| 日韩av一区在线观看| 69**夜色精品国产69乱| 中文字幕少妇一区二区三区| 九色91av视频| 亚洲欧美资源在线| 亚洲精选一区二区| 日韩美女在线观看| 亚洲午夜国产成人av电影男同| 色妞欧美日韩在线| 91精品一区二区| 欧美最顶级丰满的aⅴ艳星| 亚洲va久久久噜噜噜久久天堂| 午夜精品久久久久久99热| 欧美最猛黑人xxxx黑人猛叫黄| 日韩电影网在线| 日韩精品在线视频观看| 国产精品免费视频久久久| 国产精品欧美风情| 在线播放日韩欧美| 国产美女久久精品| 国产91精品不卡视频| 国产日韩精品一区二区| 欧美日韩性视频在线| 国外成人性视频| 免费不卡欧美自拍视频| 美日韩丰满少妇在线观看| 欧美性xxxx在线播放| 国内久久久精品| 97色伦亚洲国产| 亚洲18私人小影院| 8090成年在线看片午夜| 欧美激情网站在线观看| 伊人青青综合网站| 亚洲精品国产成人| 97精品伊人久久久大香线蕉| 4k岛国日韩精品**专区| 欧美最猛性xxxx| 国产日韩中文在线| 91国产视频在线播放| 欧美精品videosex牲欧美| 日本成熟性欧美| x99av成人免费| 日韩欧美国产免费播放| 亚洲人成电影网站色| 亚洲已满18点击进入在线看片| 日韩专区在线观看| 国内成人精品视频| 欧美大片免费观看在线观看网站推荐| 亚洲色图五月天| 国外色69视频在线观看| 色中色综合影院手机版在线观看| 久久人人爽国产| 国内外成人免费激情在线视频| 欧美激情精品久久久久久免费印度| 98午夜经典影视| 色综合久久悠悠| 久久综合色影院| 日韩hd视频在线观看| 久久久久久久一区二区三区| 亚洲人成电影网| 欧美限制级电影在线观看| 欧美肥婆姓交大片| 日本成人免费在线| 欧美人与性动交| 亚洲天堂成人在线视频| 在线色欧美三级视频| 久久久久久久久久国产精品| 这里只有精品在线观看| 亚洲国产天堂久久综合网| 国产精品自拍网| 国产精品电影在线观看| 亚洲奶大毛多的老太婆| 国产精品高清在线观看| 亚洲自拍偷拍区| 中日韩午夜理伦电影免费| 亚洲第一男人av| 亚洲精品视频久久| 久国内精品在线| 成人性教育视频在线观看| 亚洲激情视频在线观看| 国产精品国产三级国产aⅴ9色| 日韩欧美有码在线| 一区二区国产精品视频| 国产精品美女av| 亚洲精品国精品久久99热| 久久综合久久八八| 91精品国产精品| 精品一区二区三区三区| 日韩成人在线观看| 欧美性色xo影院| 欧美成人午夜免费视在线看片| 日本一区二区不卡| 成人黄色免费网站在线观看| 欧美最猛性xxxxx亚洲精品| 在线日韩av观看| 亚洲欧美激情精品一区二区| 日韩中文有码在线视频| 成人444kkkk在线观看| 久久久久这里只有精品| 97视频在线播放| 精品久久香蕉国产线看观看gif| 性色av香蕉一区二区| 亚洲xxx视频| 亚洲欧美三级在线| 亚洲成人久久久| 精品视频一区在线视频| 91在线|亚洲| 亚洲综合色激情五月| 国产精品久久久999| 91社区国产高清| 亚洲福利视频久久| 久久精品成人欧美大片古装| 日韩大片免费观看视频播放| 亚洲第一免费网站| 欧美成人剧情片在线观看| 亚洲少妇中文在线| 日本最新高清不卡中文字幕| 欧美国产在线电影|