关于C++ this指针的一个有趣的有关问题
关于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,和下面的代码是一样的
以下程序的运行结果是什么,以及把注有****的这句去掉后的运行结果是什么,关键是为什么会有这个结果,谢谢大家了哈!
#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"); }