空指针也能调用对象成员函数。。
这段代码能运行吗?
/////////////////////////////////////////////////////// // 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指针的理解。
-
#include <iostream>
-
-
class CTestThis
-
{
-
public:
-
int GetColor() { return this->color; }
-
void SetColor(int _color) { this->color = _color; }
-
void Display() { std::cout << this->color << std::endl; }
-
-
private:
-
int color;
-
};
-
-
void SetColor(int _color, CTestThis* _)
-
{
-
_->SetColor(_color);
-
}
-
-
void Display(CTestThis* _)
-
{
-
std::cout << _->GetColor() << std::endl;
-
}
-
-
void main(void)
-
{
-
CTestThis test;
-
-
test.SetColor(3);
-
test.Display();
-
-
SetColor(33, &test);
-
Display(&test);
-
-
system("pause");
-
}
【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就多此一举了。