//
// 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實現的。