c++中空指针对象访问成员问题 5
classBase{public:voidfun3(void){cout<<"Basefun3"<<endl;}};Base*pBase=NULL;pBase->fun3...
class Base
{
public:
void fun3(void)
{
cout <<"Base fun3"<<endl;
}
};
Base *pBase = NULL;
pBase->fun3();
为什么可以运行呢??? 展开
{
public:
void fun3(void)
{
cout <<"Base fun3"<<endl;
}
};
Base *pBase = NULL;
pBase->fun3();
为什么可以运行呢??? 展开
6个回答
展开全部
这与类名调用函数是一样的
与对象无关
哦 错了 只有静态函数才可以
好像是这样
主动使用一个类时,类就会加载到内存中
包括类的静态成员,和方法(静态和非静态都会加载)
如此,我们声明一个类指针时,类就会被加载
所以即使是一个空指针,但访问的是类的方法。
与对象无关
哦 错了 只有静态函数才可以
好像是这样
主动使用一个类时,类就会加载到内存中
包括类的静态成员,和方法(静态和非静态都会加载)
如此,我们声明一个类指针时,类就会被加载
所以即使是一个空指针,但访问的是类的方法。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
引用smile5201314Y的回答
pBase虽然为空 可他仍然是 Base的对象 既然是Base的对象 当然可以访问Base的成员了
但是空指针对象却不可以访问内存,一旦访问内存就会出现空指针错误!
例如:
#include <iostream>
using namespace std;
class Base
{
private:
int data;
public:
Base()
{
data = 0;
}
void fun3(void)
{
cout <<"Base fun3"<<data<<endl;
}
};
int main() {
Base *pBase = NULL;
pBase->fun3();
return 0;
}
追问
我不明白的是为什么Base *pBase = NULL就实例化了一个空对象,并没有new,仅仅是声明一个指针而已啊
追答
Base *pBase = NULL
我以为并没有“实例化”一个空对象,但这与pBase是Base的对象并不矛盾,编译器编译处理时候会为pBase绑定一个类,因此它就成这这个类的一个对象了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为函数里面没有调用任何成员变量,所有类实例共享同一成员函数地址,也就是这个函数地址从编译完就不会再变了,类实例化只是实例化成员变量而已。所以跟调用一个函数一样,但是如果里面调用了成员变量就会出错。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-10-23
展开全部
C++为空的类在实例化时会占用一个字节的内存填充类型为char,这是为了给类实体一个地址,所以pBase地址不会为0x00000000的
你可以搜索一下有关空类实例化的文章,会有详细解释的
你可以搜索一下有关空类实例化的文章,会有详细解释的
更多追问追答
追问
那你的意思 Base *pBase = NULL;就实例化了一个空对象么?没有new啊
只是声明一个指针而已
追答
但是虽然内容为空,但是他依然是这个类的一个实例,是实例就可以调用其函数,与内容无关
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询