C++ 面向对象编程提高代码的效率性和健壮性

来源:互联网 发布:淘宝新店怎么做推广 编辑:程序博客网 时间:2024/06/08 10:21

一、通过引用来传递和返回对象

和其他变量一样,对象既可以通过传值方式,也可以通过引用方式来传递和返回。一般来说,除非迫不得已,都采用引用方式。这是因为通过传值方式来传递和返回对象需要面临对象间的拷贝操作,是数据变大,从而降低效率,浪费内存。(传递一个指向对象的指针与引用方式效果相同)

class Test{public:    void set(int n) { nNum = n; };    int get() const { return nNum; };private:    int nNum;};void f(Test &test) {         test.set(999);        CString s;        s.Format(_T("%d"), test.get());        MessageBox(s);};Test& g() {        // 函数返回的是静态对象的引用,不是局部对象的引用        // 否则g返回给调用者的引用将参考到一个已经不存在的对象        static Test test;         test.set(-999);        return test;};// 用户调用Test test1, test2;f(test1);test2 = g();CString s;s.Format(_T("%d"), test2.get());MessageBox(s);

二、const类型参数的对象引用

通常对象作为函数参数通过引用传递时,而该函数又无需改变对象数据成员的值而改变对象的状态,此时可将参数表为const,防止对参数的误写。

class Test{public:    // n只是给成员变量赋值,并不会改变自身的值    void set(const int& n) { nNum = n; };private:    int nNum;};

三、const成员函数

如果成员函数无需直接或间接改变函数所属函数对象的任何数据成员,那么最好将该函数标记为const。const成员函数只能调用const成员函数,因为非const成员函数可能改变对象的数据成员,而const成员函数不能改变对象状态

class Test{public:    void set(int n) { nNum = n; };    // 因为get函数不改变类数据成员的值,所以可将该函数标位const    int get() const { return nNum; };private:    int nNum;};

四、重载成员函数,便于不同类型的参数输入

原创粉丝点击