读书人

关于C++ this指针的一个有趣的有关问题

发布时间: 2012-09-17 12:06:51 作者: rapoo

关于C++ this指针的一个有趣的问题
以下程序的运行结果是什么,以及把注有****的这句去掉后的运行结果是什么,关键是为什么会有这个结果,谢谢大家了哈!
#include <stdio.h>
class MyClass
{
public:
int data;
MyClass(int data)
{
this->data=data;
}
void print()
{
printf("%d\n",data); //****
printf("hello\n");
}
};
int main()
{
MyClass*p;
p=new MyClass(1);
p->print();
p[0].print();
p[1].print();
p[1000].print();
return 0;
}

在百度上看到的,回答是:
MyClass(int data)
{
this->data=data;
}

构造函数里有三个data ,this->data是这个类的变量. 其余两个是这个类的函数的变量

p和p[0]相同不多说 p[1]和p不同应该是p[1]调用的默认构造函数所以 data没有初始化,而非楼上说的


有两个疑问:
第一:
void print()
{
printf("%d\n",data); //****
printf("hello\n");
}


函数里面没有定义 data ,data用的是那个变量? 类里面的 还是MyClass(int data)里面的,MyClass(int data)里面data没有声明可外部调用呀。

第二:

p[0].print();
p[1].print();
p[1000].print();


p->print(); 我还知道是调用的是初始化MyClass(1);之后,MyClass类里面的print(),但是p[1].print();p[1000].print();我就不知道调用什么了,P[1]和P[1000]指向哪里?指向哪个类?







[解决办法]
环境 vs2008 debug
第一个问题比较简单,成员函数中使用成员变量会默认加上this,和下面的代码是一样的

Assembly code
void print() {  printf("%d\n",this->data); //****  printf("hello\n"); } 

读书人网 >C++

热点推荐