函數的返回類型是引用類型與函數的返回類型是指針類型


//
//  main.cpp
//  引用類型指明函數的返回類型
//  指針類型指明函數返回指針類型
//  Created by mac on 2019/4/7.
//  Copyright © 2019年 mac. All rights reserved.
#include <iostream>
using namespace std;

//函數的返回值是個引用
int &f2(int a[],int i){
    return a[i];
}

//函數的返回值是個指針
int *f3(int a[],int i){
    return &a[i];
}

//引用變量破壞信息隱藏原則
class C{
public:
    C(){} //構造函數
    ~C(){} //析構函數
    int & getRefN(){
        return n;
    }
    
    int getN(){
        return n;
    }
private:
    int n = 2;
}c;

int main(int argc, const char * argv[]) {
    int a[]={1,2,3,4,5};
    //在右側調用f2
    int n = f2(a, 3);
    cout<<n<<endl; //輸出4
    
    //在左側調用f2
    f2(a, 3)=6;
    for (int i=0; i<5; i++) {
        cout<<*(a+i)<<" "<<endl;
    }
    
    //右側調用f3
    int d = *f3(a,3);
    cout<<d<<endl;
    
    //左側調用f3
    *f3(a,3)=9;
    // 注意:此處如果寫成 p<p+5 那么結果就悲劇了,想想其中的原因?
    // 因為a+5是一個常數,有個上界范圍,那個p<p+5是個沒有上界的恆等式,將會輸出一大堆東西
    // 1 2 3 9 5 注意都有換行
    for (int *p=a;p<a+5; p++) {
        cout<<*p<<" "<<endl;
    }
    //並非單純的數學計算
    int *p=a;
    cout<<p<<endl;    // 輸出的是 0x7ffeefbff4b0
    cout<<a<<endl;    // 輸出的是 0x7ffeefbff4b0
    cout<<a+1<<endl;  // 輸出的是 0x7ffeefbff4b4
    cout<<p+1<<endl;  // 輸出的是 0x7ffeefbff4b4
    
    //引用變量破壞信息隱藏原則
    // 私有變量n的默認值是2 通過getRefN()函數修改為10
    cout<<c.getN()<<endl; //輸出2
    int &k=c.getRefN();
    k=10;
    cout<<c.getN()<<endl;//輸出10
    return 0;
}

Tips

  • fabs函數是求絕對值函數。需要頭文件 #include <math.h> 或者#include <cmath>
  • 對於靜態綁定來說,調用哪個函數是在編譯階段確定的。對於動態綁定,則要推遲到運行階段才能確定。動態綁定是通過將成員函數聲明為virtual實現的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM