20. A *p=NULL,p 可以调用 A 类里面的函数嘛?
生活随笔
收集整理的這篇文章主要介紹了
20. A *p=NULL,p 可以调用 A 类里面的函数嘛?
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
我們來(lái)觀察一下:
#include<iostream> class A { public:A() { a = 5; }int a;void sum(){int b = 10;} };int main() {A *pa = NULL;pa->sum();//問(wèn)題這里,奇怪了為什么指針并沒(méi)有new A,也就是說(shuō)沒(méi)有初始化,但是還可以執(zhí)行函數(shù)sum()呢? (就是說(shuō)怎么還能找得到sun()函數(shù)的地址呢?)int aa = pa->a;//這個(gè)時(shí)候會(huì)出錯(cuò)誤 找不到pa->a,這個(gè)是可以理解的。system("pause");return 0; }問(wèn)題:
1)為什么指針并沒(méi)有new A,也就是說(shuō)沒(méi)有初始化,但是還可以執(zhí)行函數(shù)sum()呢? (就是說(shuō)怎么還能找得到sun()函數(shù)的地址呢?)
??? 這里問(wèn)題很簡(jiǎn)單,因?yàn)?span style="color:#f33b45;">函數(shù)在類里面是獨(dú)立于類存在的,而且不占用類的空間,在程序編譯的時(shí)候就已經(jīng)把函數(shù)的地址分配好了,因此只要有這么一個(gè)對(duì)象,不管他指向NULL還是非NULL都是可以調(diào)用函數(shù)的,也不會(huì)出錯(cuò)。因此pa->sum()可以運(yùn)行;
?2)int aa = pa->a; // 為什么這個(gè)時(shí)候會(huì)出錯(cuò)誤 找不到pa->a?。
??? 但是這里就有問(wèn)題了,pa就是NULL了,沒(méi)有空間了,但是a是類的一個(gè)成員,沒(méi)有空間的對(duì)象會(huì)有內(nèi)部的a的存在?
??? “皮之不存,毛將焉附?”
?
總結(jié)
以上是生活随笔為你收集整理的20. A *p=NULL,p 可以调用 A 类里面的函数嘛?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 19.C 语言与 C++在定义常量时有什
- 下一篇: 22.类对象和类指针