this指针的迷惑。解决方法
this指针的迷惑。
子类A的成员函数调用父类B的一个方法。显示调用:B::fun(),fun方法里用到了this指针。请问,这个this指针是指向谁?
------解决方案--------------------
子类A
------解决方案--------------------
------解决方案--------------------
关于this指针的一个经典回答:
当你进入一个房子后,
你可以看见桌子、椅子、地板等,
但是房子你是看不到全貌了。
对于一个类的实例来说,
你可以看到它的成员函数、成员变量,
但是实例本身呢?
this是一个指针,它时时刻刻指向你这个实例本身
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
派生类的指针可以转换成基类的指针.
当你使用一个基类的函数或数据成员时,发生这一个转换.
------解决方案--------------------
this 就是本身
当前什么是什么对象this就是什么
this 默认的类型就是当前类本身的一个const指针
子类A的成员函数调用父类B的一个方法。显示调用:B::fun(),fun方法里用到了this指针。请问,这个this指针是指向谁?
------解决方案--------------------
子类A
------解决方案--------------------
------解决方案--------------------
关于this指针的一个经典回答:
当你进入一个房子后,
你可以看见桌子、椅子、地板等,
但是房子你是看不到全貌了。
对于一个类的实例来说,
你可以看到它的成员函数、成员变量,
但是实例本身呢?
this是一个指针,它时时刻刻指向你这个实例本身
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
派生类的指针可以转换成基类的指针.
当你使用一个基类的函数或数据成员时,发生这一个转换.
------解决方案--------------------
this 就是本身
当前什么是什么对象this就是什么
this 默认的类型就是当前类本身的一个const指针
- C/C++ code
CurClass *const this;
------解决方案--------------------
子类继承父类也就是子类将父类的成员方法拷贝了一份到自己中,如果子类与父类有相同的方法的时候,用this指针调用的时候会调用子类的成员方法,如果子类与父类没有相同的方法的时候,那么this就会调用父类的那个方法:eg:
#include <iostream>
using namespace std;
//父类A
class A{
public:
void exportA{
cout<<"This is A"<<endl;
}
};
//子类B继承父类A
class B:public A{
public:
void exportB{
cout<<"This is B"<<endl;
}
};
int main()
{
B b;
b.exportB();
}
这个例子中子类B继承了父类A 那么子类B中的代码可以等效为:
class B{
public:
void exportA{
cout<<"This is A"<<endl;
}
void exportB{
cout<<"This is B"<<endl;
}
}这样就实现了代码的重用也就是继承的根本意义。那么this指向这个问题自然而然也就弄明白了:如果子类与父类有相同的方法的时候,用this指针调用的时候会调用子类的成员方法,如果子类与父类没有相同的方法的时候,那么this就会调用父类的那个方法。
------解决方案--------------------
- C/C++ code
#include <iostream> class Base { public: void run() { this->what(); } void what() { printf("I am Base\r\n"); } virtual void vrun() { this->what(); } }; class B: public Base { public: void run() { this->what(); } void what() { printf("I am B\r\n"); } virtual void vrun() { this->what(); } }; void run(Base *pa) { pa->run();//输出是I am Base。 pa->vrun();//输出是I am B。 }; void main() { B b; b.run();//输出是I am B。 run(&b); system("pause"); }
------解决方案--------------------
就简单的单继承来说,指向子类。之所以在父类中可以正常使用,是因为父类数据在头部,继承类数据在其后。建议你看看那本经典的 《深入探索C++对象模型》
------解决方案--------------------
------解决方案--------------------
太扯了。
编码的时候,脱离了类的实现this就不能用了,你在实现哪个类的成员函数的时候使用了this,this就代表这个类的一个对象的指针。