Liny_@NotePad

沉迷ACG中

空指针也能调用对象成员函数。。

这段代码能运行吗?

///////////////////////////////////////////////////////
//	CopyRight(c) 2009, YOYO, All Rights Reserved.
//	Author: LIN YiQian
//	Created: 2009/10/14
//	Describe: For Test ^^
///////////////////////////////////////////////////////
#include <iostream>
using namespace std;

class CTest
{
public:
	void print(const char* const pszMsg)
	{
		cout << pszMsg << endl;
	}
};

int main(void)
{
	CTest* pTest = NULL;
	pTest->print("hello world");

	return 0;
}

C++中的this指针

 this总是指向当前对象,每次执行成员函数时,形如本例中的SetColor(int _color),总是会被编译成SetColor(CTestThis* this, int _color),编译器会自动带入对象地址作为this指针所指向的地址,本例中的全局函数也许可以加深对this指针的理解。

  1. #include <iostream>
  2.  
  3. class CTestThis
  4. {
  5. public:
  6.         int GetColor() { return this->color; }
  7.         void SetColor(int _color) { this->color = _color; }
  8.         void Display() { std::cout << this->color << std::endl; }
  9.  
  10. private:
  11.         int color;
  12. };
  13.  
  14. void SetColor(int _color, CTestThis* _)
  15. {
  16.         _->SetColor(_color);
  17. }
  18.  
  19. void Display(CTestThis* _)
  20. {
  21.         std::cout << _->GetColor() << std::endl;
  22. }
  23.  
  24. void main(void)
  25. {
  26.         CTestThis test;
  27.  
  28.         test.SetColor(3);
  29.         test.Display();
  30.  
  31.         SetColor(33, &test);
  32.         Display(&test);
  33.  
  34.         system("pause");
  35. }

【20090820】C++培训日记-进阶1

今天学习的内容:this指针、继承(不使用虚函数)、多态、单继承与虚函数表

C++里的静态成员函数为何不能用const?

细看const成员函数的定义:不会修改该对象的数据成员。
我们知道,访问成员函数时会自动带上this,形如CTest::SetColor(int color),会自动转换成CTest::SetColor(CTest* this, int color)。
在const成员函数时,实际转换成了CTest::SetColor(const CTest* this, int color)。
this指向的是一个const对象,const对象的数据成员是不能改变的。
而静态成员函数实际上是一个全局函数,没有this指针,根本不会访问到对象的数据成员,在此使用const就多此一举了。