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

本文探讨了C++中对象的传递方式,包括通过引用传递和返回对象的方法,解释了为何通常优选引用而非值传递。同时介绍了如何利用const修饰符确保函数不修改对象状态,以及如何声明const成员函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值