创建派生类对象this指针指向的问题
using namespace std;
class base_class
{
public:
base_class(void){
cout << "base_class contruct" <<endl;
this->printdis();
};
void test ()
{
this->printdis();
}
virtual void printdis(){
cout << "base_class print" << endl;
};
~base_class(){
cout << "base_class destroy" <<endl;
};
};
class derivate_class: public base_class
{
public:
derivate_class(void) {
cout << "derivate_class contruct" <<endl;
};
void printdis(){
cout << "derivate_class print" << endl;
};
~derivate_class()
{
cout << "derivate_class destroy" <<endl;
};
};
int main(void)
{
derivate_class derivation;
((base_class *)&derivation) ->printdis();
derivation.test();
return 0;
}
运行结果如图:

粉红标出的是构造函数this->printdis();打印的,红色是derivation.test();打印的。
按我的理解,这里的this指针应该是派生类对象derivation,基类中this->printdis()等同于((base_class *)&derivation) ->printdis();,结果应该都是"derivate_class print" 。不明白为什么运行后这里构造函数打印出来的不对。我跟了一下this和derivation的地址,他们是一样的。
我跟了构造函数中的this和test中的this,都是(base_class * const) 0x22ff20。
...全文
相关推荐
java 赋值运算符、拷贝初始化和this指针_.docx
java 赋值运算符、拷贝初始化和this指针_.docx
深入理解C++中的this指针及对象指针的用法
本文深入探讨了C++编程中的this指针以及对象指针的用法。通过实例代码展示了this指针在类成员函数中的应用,特别是如何通过this指针返回对象地址或在操作符重载中使用。同时,本文还介绍了如何创建对象数组以及通过指针访问对象数组的成员,包括指向基类和派生类对象的指针的使用限制和特点。
华南理工大学《C++》期末复习资料汇总.pdf
华南理工大学《C++》期末复习资料汇总
C++试题附答案(1).pdf
,
C++程序设计自考题-4.docx
.


