关键词搜索

源码搜索 ×
×

this指针再探讨:究竟绑定谁?

发布2013-05-26浏览7897次

详情内容

        在深入MFC之前,应该先搞懂最简单的this指针。我们先看简单的程序:

 

  1. #include <iostream>
  2. using namespace std;
  3. class Base
  4. {
  5. public:
  6. void fun()
  7. {
  8. cout << "Base fun" << endl;
  9. }
  10. };
  11. class Derived : public Base
  12. {
  13. public:
  14. void fun()
  15. {
  16. cout << "Derived fun" << endl;
  17. }
  18. };
  19. int main()
  20. {
  21. Base b, *pB;
  22. pB = &b;
  23. pB->fun();
  24. Derived d;
  25. pB = &d;
  26. pB->fun();
  27. return 0;
  28. }

       结果为:

 

Base fun
Base fun

       改为虚函数,如下:

 

  1. #include <iostream>
  2. using namespace std;
  3. class Base
  4. {
  5. public:
  6. virtual void fun()
  7. {
  8. cout << "Base fun" << endl;
  9. }
  10. };
  11. class Derived : public Base
  12. {
  13. public:
  14. virtual void fun()
  15. {
  16. cout << "Derived fun" << endl;
  17. }
  18. };
  19. int main()
  20. {
  21. Base b, *pB;
  22. pB = &b;
  23. pB->fun();
  24. Derived d;
  25. pB = &d;
  26. pB->fun();
  27. return 0;
  28. }

      结果为:

 

Base fun
Derived fun

      下面我们来看看this指针,程序如下:

 

  1. #include <iostream>
  2. using namespace std;
  3. class Base;
  4. Base *pB;
  5. class Base
  6. {
  7. public:
  8. Base()
  9. {
  10. pB = this;
  11. cout << "Base Constructor" << endl;
  12. }
  13. void fun()
  14. {
  15. cout << "Base fun" << endl;
  16. }
  17. };
  18. class Derived : public Base
  19. {
  20. public:
  21. Derived()
  22. {
  23. cout << "Derived Constructor" << endl;
  24. }
  25. void fun()
  26. {
  27. cout << "Derived fun" << endl;
  28. }
  29. };
  30. int main()
  31. {
  32. Base b;
  33. pB->fun();
  34. Derived d;
  35. pB->fun();
  36. return 0;
  37. }

       程序结果为:

 

Base Constructor
Base fun
Base Constructor
Derived Constructor
Base fun
       

      改为虚函数,程序如下:

 

  1. #include <iostream>
  2. using namespace std;
  3. class Base;
  4. Base *pB;
  5. class Base
  6. {
  7. public:
  8. Base()
  9. {
  10. pB = this;
  11. cout << "Base Constructor" << endl;
  12. }
  13. virtual void fun()
  14. {
  15. cout << "Base fun" << endl;
  16. }
  17. };
  18. class Derived : public Base
  19. {
  20. public:
  21. Derived()
  22. {
  23. cout << "Derived Constructor" << endl;
  24. }
  25. virtual void fun()
  26. {
  27. cout << "Derived fun" << endl;
  28. }
  29. };
  30. int main()
  31. {
  32. Base b;
  33. pB->fun();
  34. Derived d;
  35. pB->fun();
  36. return 0;
  37. }

        结果为:

 

Base Constructor
Base fun
Base Constructor
Derived Constructor
Derived fun

       下面的这个程序颇似MFC程序:

 

  1. #include <iostream>
  2. using namespace std;
  3. class Base
  4. {
  5. public:
  6. Base *pB;
  7. Base()
  8. {
  9. pB = this;
  10. cout << "Base Constructor" << endl;
  11. }
  12. virtual void fun()
  13. {
  14. cout << "Base fun" << endl;
  15. }
  16. };
  17. class Derived : public Base
  18. {
  19. public:
  20. Derived()
  21. {
  22. cout << "Derived Constructor" << endl;
  23. }
  24. virtual void fun()
  25. {
  26. cout << "Derived fun" << endl;
  27. }
  28. };
  29. Derived d;
  30. Base *getPointer()
  31. {
  32. return d.pB;
  33. }
  34. int main()
  35. {
  36. Base *p = getPointer();
  37. p->fun();
  38. return 0;
  39. }

      结果为:

 

Base Constructor
Derived Constructor
Derived fun

 

      如果要深入理解MFC, 那么搞懂上面这些简单的程序是很有必要的。



 

相关技术文章

点击QQ咨询
开通会员
返回顶部
×
微信扫码支付
微信扫码支付
确定支付下载
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载