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;
}

 

 
posted @ 2020-08-20 11:04  DNoSay  阅读(267)  评论(0编辑  收藏  举报