在深入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, 那么搞懂上面这些简单的程序是很有必要的。