C++基礎知識介紹

1.名字空間
**************************************************************
命名空間是用來組織和重用代碼的。如同名字一樣的意思,NameSpace(名字空間),之所以出來這樣一個東西,是因爲人類可用的單詞數太少,並且不同的人寫的程序不可能所有的變量都沒有重名現象,對於庫來說,這個問題尤其嚴重,如果兩個人寫的庫文件中出現同名的變量或函數(不可避免),使用起來就有問題了。爲了解決這個問題,引入了名字空間這個概念,通過使用 namespace xxx;你所使用的庫函數或變量就是在該名字空間中定義的,這樣一來就不會引起不必要的衝突了。
**************************************************************

#include <iostream>
using namespace std;
namespace name1
{
int a = 3;
}
namespace name2
{
double a = 3.14;
}
int main() 
{
cout << name1::a << endl;//::作用域解析符
cout << name2::a << endl;
return 0;
//我們使用了兩個相同名字的全局變量:var,
一個是被定義在name1名字空間裏的,另一個是被定義在name2名字空間內的.
因爲有了名字空間所以沒有發生重定義的錯誤.
}

2.C++基本的輸入輸出流
**************************************************************
1.數據的輸出cout
cout是標準輸出設備即顯示器(默認設備)連接的預定義輸出流。C++語言的插入運算符“<<”向輸出流發送字符,cout是數據的目的地,插入運算符“<<”把數據傳送到cout。
輸出流對象cout輸出數據的語句格式爲:
cout<<數據1<<數據2<<……<<數據n;
其中,“<<”是輸出操作符,用於向cout輸出流中插入數據。
在cout中還可以使用流控制符控制數據的輸出格式,但要注意使用這些流控制符時,要在程序的開始部分嵌入頭文件“iomanip.h”。
這裏寫圖片描述
2.數據的輸入cin
cin是與標準輸入設備即鍵盤(默認設備)連接的預定義輸入流。它從輸入流中取出數據,數據從輸入提起運算符“>>”處流進程序。
輸入流對象cin輸入數據的語句格式爲:
cin>>變量名1>>變量名2>>……>>變量名n;
其中,“>>”是輸入操作符,用於從cin輸入流中取得數據,並將取得的數據傳送給其後的變量,從而完成輸入數據的功能。
注意:“>>”操作符後除了變量名外不得有其他數字、字符串,否則系統會報錯。
*****************************************************************

#include<iostream>
#include<iomanip.h>
int main()
{
int a=1;
double b=3.14;
int c=0;
cout<<int-><<a<<double-<<b<<endl;
cout<<輸入一個數:<<endl;
cin>>c;
cout<<Dec<<c<<endl;
cout<<Hex<<c<<endl;
cout<<Oct<<c<<endl;
return 0;
}

3.重載(c++爲什麼要支持重載)
**************************************************************
重載,簡單說,就是函數或者方法有相同的名稱,但是參數列表不相同的情形,這樣的同名不同參數的函數或者方法之間,互相稱之爲重載函數或者方法。
重載是指相同的函數名,但參數的類型或個數中只要有所不同,便進行再定義,編譯之後重載的函數都具有不同的地址,也就是說雖然函數名相同,實際上是不同的函數,在調用時,編譯系統會根據不同之處自動區別是調用哪一個函數。對於普通函數和後面要學的類的成員函數都適用。

**************************************************************

#include <iostream>
using namespace std;
float fun(float x);
double fun(double x);
int main ( )
{
    float f = 132.64;
    double d = 132.64;
    cout << fun(f) << endl;
    cout << fun(d) << endl;
    //cout << fun(5) << endl;    //編譯錯,參數5可以轉換爲float,也可轉換爲double
    return 0;
}
float fun(float x)
{
    return x / 2.0 ;
}
double fun(double x)
{
    return x / 3.0;
}

運行結果:
66.32
44.2133
4.C++缺省參數
**************************************************************
缺省參數是聲明或定義函數時爲函數的參數指定一個默認值。在調用該函數時,如果沒有指定實參則採用該默認值,否則使用指定參數。對於C++的缺省參數的使用我們應該注意以下幾點:
缺省參數不能出現在函數指針、函數引用以及typedef中
缺省參數可以在不同的聲明中逐步給出
不同作用域的聲明中定義的缺省參數是獨立的,互不影響;
同一作用域的聲明中不能重複定義同一個參數的缺省值。

**************************************************************

#include <iostream>
using namespace std;
int sum(int x=0, int y=0)
{
return x+y;
}
int main ( )
{
    cout << sum() << endl;//結果爲0
    cout << sum(6) << endl;//結果爲6
    cout << sum(6, 10) << endl;//結果16
    return 0;
}

一旦爲函數的某個參數指定了缺省值,則必須爲後續參數也定義缺省值,從右到左定義缺省參數。

//半缺省參數
int Add2 (int a, int b = 0)
{
return a + b;
}
void Test ()
{
Add1();
Add1(1);
Add1(1,1);
Add2(2);
Add2(2,2);
}

5.指針和引用(概念、使用方法、做參數、做返回值的作用,指針和引用的區別)

**************************************************************
指針,全稱爲指針變量,是用來存儲內存地址的一種變量。程序中,一般通過指針來訪問其指向的內存地址中的內容(數據)。
引用,是C++中提出來的一種新的使用變量的方式,即,給實際變量起個別名,通過這個別名來引用實際的變量。標準C中不支持變量的引用。
這兩個概念沒有任何相關性。
指針是實實在在的變量,有自己的內存存儲空間,它可以指向任何有效的變量。
引用是一種形式、方法,定義的引用變量,實際上是原實際變量的另一個名稱(別名),引用變量本身沒有自己的實際存儲空間,操作引用變量,就是在操作實際變量。
定義的格式爲:
類型&引用變量名=已定義過的變量名;//類型必須和引用變量是同種類型
引用的特點:
1. 一個變量可取多個別名
2. 引用必須初始化
3. 引用只能在初始化的時候引用一次,不能改變爲再引用其他的變量。
引用和指針的區別和聯繫
1. 引用只能在定義時初始化一次,之後不能改變指向其它變量(從一而終);指針變量的值可變。
2. 引用必須指向有效的變量,指針可以爲空。
3. sizeof指針對象和引用對象的意義不一樣。sizeof引用得到的是所指向的變量的大小,而sizeof指針是對象地址的大小。
4. 指針和引用自增(++)自減(–)意義不一樣。
5. 相對而言,引用比指針更安全。

**************************************************************

void main()  
{  
    //普通引用  
    int  a = 10;  
    int &b = a;  
    printf("b:%d \n", b);  

    //常引用  
    int  x = 20;  
    const int &y = x;  //常引用 是 讓變量 引用只讀屬性 不能通過y去修改x了  
    //y = 21;  

    //常引用 初始化 分爲2種情況  
    //1> 用變量 初始化 常引用  
    {  
        int x1 = 30;  
        const int &y1 = x1; //用x1變量去初始化 常引用  
    }  
    //2> 用字面量 初始化 常量引用  
    {  
        const int a = 40;  //c++編譯器把a放在符號表中  
        int &m = 41; //普通引用 引用一個字面量 請問字面量有沒有內存地址 答案是沒有  
        //引用 就是給內存取多個門牌號 (多個別名) 沒有內存,怎麼給它取別名,因此會報錯!  
        //printf("&40:%d \n", &40);  
        const int &m = 43;  //c++編譯器 會 分配內存空間   
    }  
    cout<<"hello..."<<endl;  
    system("pause");  
    return ;  
}

引用做參數:在函數內部會對此參數進行修改 提高函數調用和運行效率
引用作返回值:以引用返回函數值,定義函數時需要在函數名前加&
用引用返回一個函數值的最大好處是,在內存中不產生被返回值的副本。


//值返回
int Addi(int a,int b)
{
    return a+b;
}
//引用返回
int& Add(int a,int b)
{
    int ret = a+b;
    return ret;
}

引用作爲返回值,必須遵守以下規則:
(1)不能返回局部變量的引用。主要原因是局部變量會在函數返回後被銷燬,因此被返回的引用就成爲了”無所指”的引用,程序會進入未知狀態。
(2)不能返回函數內部new分配的內存的引用。雖然不存在局部變量的被動銷燬問題,可對於這種情況(返回函數內部new分配內存的引用),又面臨其它尷尬局面。例如,被函數返回的引用只是作爲一 個臨時變量出現,而沒有被賦予一個實際的變量,那麼這個引用所指向的空間(由new分配)就無法釋放,造成memory leak。
(3)可以返回類成員的引用,但最好是const。主要原因是當對象的屬性是與某種業務規則(business rule)相關聯的時候,其賦值常常與某些其它屬性或者對象的狀態有關,因此有必要將賦值操作封裝在一個業務規則當中。如果其它對象可以獲得該屬性的非常 量引用(或指針),那麼對該屬性的單純賦值就會破壞業務規則的完整性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章