C++面向对象入门(十六)指向对象类型的空指针访问成员函数
使用空指针(指向类对象类型的)调用类的成员函数
1, 成员函数访问了与*this指向的对象的静态成员属性(即对象的非静态成员属性), 会抛出异常
2, 成员函数不访问与*this指向的对象的静态成员属性, 能正常运行
为了防止上述1中抛出的异常, 在成员函数中使用以下内存
if(this == NULL){
return;
}
#include <iostream> #include <string> using namespace std; /** * 使用空指针(指向类对象类型的)调用类的成员函数 * 1, 成员函数访问了与*this指向的对象的静态成员属性(即对象的非静态成员属性), 会抛出异常 * 2, 成员函数不访问与*this指向的对象的静态成员属性, 能正常运行 * 为了防止上述1中抛出的异常, 在成员函数中使用以下内存 * if(this == NULL){ * return; * } */ class Rider { public: static string manufacturer; Rider() { } Rider(const string &name, const string &model, const string &driver) : name(name), model(model), driver(driver) { } ~Rider() { cout << model << " UntransForm" << endl; } Rider(const Rider &rider) { cout << "Copy Rider, and Model is " << rider.model << endl; } Rider &changeModel(const string &model) { this->model = model; return *this; } void showModel() { cout << model << endl; } void showPattern() { if (this == NULL) { return; } cout << model << endl; } void showManufacturer() { cout << manufacturer << endl; } private: string name; string model; string driver; }; string Rider::manufacturer = "Toei Tokyo"; void test1() { Rider *rider = NULL; rider->showModel(); } void test2() { Rider *rider = NULL; rider->showManufacturer(); } void test3() { Rider *rider = NULL; rider->showPattern(); } int main() { // test1(); //run result: //Process finished with exit code -1073741819 (0xC0000005) // test2(); //run result: //Toei Tokyo //Press any key to continue . . . test3(); //run result: //Press any key to continue . . . system("pause"); return 0; }
路漫漫其修远兮,吾将上下而求索。