在深入MFC之前,应该先搞懂最简单的this指针。我们先看简单的程序:
#include <iostream>
using namespace std;
class Base
{
public:
void fun()
{
cout << "Base fun" << endl;
}
};
class Derived : public Base
{
public:
void fun()
{
cout << "Derived fun" << endl;
}
};
int main()
{
Base b, *pB;
pB = &b;
pB->fun();
Derived d;
pB = &d;
pB->fun();
return 0;
}
结果为:
Base fun
Base fun
改为虚函数,如下:
#include <iostream>
using namespace std;
class Base
{
public:
virtual void fun()
{
cout << "Base fun" << endl;
}
};
class Derived : public Base
{
public:
virtual void fun()
{
cout << "Derived fun" << endl;
}
};
int main()
{
Base b, *pB;
pB = &b;
pB->fun();
Derived d;
pB = &d;
pB->fun();
return 0;
}
结果为:
Base fun
Derived fun
下面我们来看看this指针,程序如下:
#include <iostream>
using namespace std;
class Base;
Base *pB;
class Base
{
public:
Base()
{
pB = this;
cout << "Base Constructor" << endl;
}
void fun()
{
cout << "Base fun" << endl;
}
};
class Derived : public Base
{
public:
Derived()
{
cout << "Derived Constructor" << endl;
}
void fun()
{
cout << "Derived fun" << endl;
}
};
int main()
{
Base b;
pB->fun();
Derived d;
pB->fun();
return 0;
}
程序结果为:
Base Constructor
Base fun
Base Constructor
Derived Constructor
Base fun
改为虚函数,程序如下:
#include <iostream>
using namespace std;
class Base;
Base *pB;
class Base
{
public:
Base()
{
pB = this;
cout << "Base Constructor" << endl;
}
virtual void fun()
{
cout << "Base fun" << endl;
}
};
class Derived : public Base
{
public:
Derived()
{
cout << "Derived Constructor" << endl;
}
virtual void fun()
{
cout << "Derived fun" << endl;
}
};
int main()
{
Base b;
pB->fun();
Derived d;
pB->fun();
return 0;
}
结果为:
Base Constructor
Base fun
Base Constructor
Derived Constructor
Derived fun
下面的这个程序颇似MFC程序:
#include <iostream>
using namespace std;
class Base
{
public:
Base *pB;
Base()
{
pB = this;
cout << "Base Constructor" << endl;
}
virtual void fun()
{
cout << "Base fun" << endl;
}
};
class Derived : public Base
{
public:
Derived()
{
cout << "Derived Constructor" << endl;
}
virtual void fun()
{
cout << "Derived fun" << endl;
}
};
Derived d;
Base *getPointer()
{
return d.pB;
}
int main()
{
Base *p = getPointer();
p->fun();
return 0;
}
结果为:
Base Constructor
Derived Constructor
Derived fun
如果要深入理解MFC, 那么搞懂上面这些简单的程序是很有必要的。