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