对引用的一些测试和学习

类的多态

class A{
public:
    virtual void test(){ cout << "this is A"<<endl; };
};
class B :public A{
public:
    void test(){ cout << "this is B"<<endl; }; 
};

void test(){
    A a;
    a.test();//  A

    B b;
    b.test();  //B

    A& ref = b;
    ref.test();//  Run B test();  实现了多态
}

将基类引用指向派生类可以达到多态的效果。
如果A类中定义有虚函数,并且在B类中重写了这个虚函数,就可以通过Ref产生多态效果。

引用还可以实现函数引用

以下是对函数的引用返回的测试代码:


int testData = 7;
int testArray[10] = { 0 };

int& data(){
    return testData;
}
int& no(int i){
    return testArray[i];
}
void test(){
    //  testData = 7
    data() -= 2;
    //对返回的引用值进行更改可以直接改变原数值,当然这个实际上用处不大,只是对引用的一些测试
    //   testData = 5
    cout << "testData:  " << testData << endl;
    int i = 5;
    //now testArray[i] = 0;
    no(i) = 5;
    cout << "testArray[i]  :  " << testArray[i] << endl;
    //   testArray[i] = 5 ; 
}

[ ]运算符的重载

const int length = 10;
class myList {
private:
    int ary[10];
public:
    int & operator [](const int & i) {
        return ary[i];
    }
};
void TestReference() {//通过[]运算符的重载,直接修改myList内部的值,当然这样就让类失去了封装性。
//不过,只是拿来测试
    myList lis;

    for (int i = 0; i < length; i++) {
        lis[i] = i;
        cout << lis[i] << " ";
    }
    // 0,1,2,3,4,5,6,7,8,9
    cout << endl;
}

以下是一些注意事项:

(1)在引用的使用中,单纯给某个变量取个别名是毫无意义的,
引用的目的主要用于在函数参数传递中,解决大块数据或对象的传递效率和空间不如意的问题。

(2)用引用传递函数的参数,能保证参数传递中不产生副本,
提高传递的效率,且通过const的使用,保证了引用传递的安全性。

(3)引用与指针的区别是,指针通过某个指针变量指向一个对象后,
对它所指向的变量间接操作。程序中使用指针,程序的可读性差;
而引用本身就是目标变量的别名,对引用的操作就是对目标变量的操作。

(4)使用引用的时机。流操作符 << 和 >> 、赋值操作符 = 的返回值、
拷贝构造函数的参数、赋值操作符 = 的参数、其它情况都推荐使用引用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值