C++學習-初識篇

C++起源史

C++由美國AT&T貝爾實驗室的本賈尼·斯特勞斯特盧普博士在20世紀80年代初期發明並實現(最初這種語言被稱作“C with Classes”帶類的C)。開始,C++是作爲C語言的增強版出現的,從給C語言增加類開始,不斷的增加新特性。虛函數(virtual function)、運算符重載(Operator Overloading)、多重繼承(Multiple Inheritance)、模板(**Template)常(Exception)、RTTI命名空間(Name Space)逐漸被加入標準

C++和C語言的關係:

C是C++的子集,C++兼容C的特性。

C++是C語言的繼承,進一步擴充和完善了C語言,成爲一種面向對象的程序設計語言。C++這個詞在中國大陸的程序員圈子中通常被讀做“C加加”,而西方的程序員通常讀做“C plus plus”,“CPP”。

和C的區別

1、數據類型

  在C語言中數據類型主要分爲基本類型、構造類型、指針類型、空類型。

基本類型:整型 int、字符型 char、實型(單精度 float、雙精度double)
構造類型:數組類型、結構類型 struct、聯合類型 union、枚舉類型 enum
指針類型
空類型:void
  而在C++中 ,除了以上類型之外,另外新增了布爾類型 bool,其值爲true或者flase,還引入了類的結構類型。

2、初始化方法

  C語言中,變量初始化的方法爲複製初始化,如:

int x = 100//複製初始化

  C++中,另外增加一種初始化方法爲直接初始化,如:
  

int x(100);   //直接初始化

  
3、變量的定義

  在C語言中,變量的定義要在函數的前面,即當函數中使用到一個新的變量時,要將該變量定義在函數的前面;而在C++中,變量可以隨用隨定義,如:
  

for(int i = 0; i < 10; i++)  //隨用隨定義

4、輸入輸出

  C語言中,輸入輸出方法如下:

int n;
scanf("%d",&n);   //利用scanf輸入
printf("%d\n, n");   //利用printf輸出

 C++中,輸入輸出方法如下:

int n;
cin>>n;         //利用cin輸入
cout<<n<<endl;  //利用cout輸出

  可以看到,C++中的輸入輸出不再關心待輸入輸出的數據類型,更加簡單方便。

  需要注意的是,在C++中若有輸入輸出,需添加頭文件:
  

#include<iostream>

另外,需要說明,cin和cout是命名空間std下的函數,即:

using namespace std;

5、命名空間

  C++中添加了命名空間這個概念,通俗來講,命名空間就是爲變量和函數創建一個自己的空間,當不同的程序員開發的源代碼中使用相同名稱的變量和函數時,主函數能夠正確地調用自己需要的函數。
  

#include <iostream>  //IO流
#include <stdio.h>  //標準輸出
using namespace std;  //命名空間,隔離名字,防止命名衝突,
                        //c++所有空間默認std命名空間

namespace my //自定義域my
{
    int a=12; 
    namespace one //自定義my域裏面嵌套one域
    {
        int c=200;
    }

}
namespace you //自定義you域
{
    int a=1; 

}
using namespace you; //將自定義域名變成全局變量

int a=100;//定義全局變量

int main()
{
    int a=10;  //定義局部變量

    printf("局部變量a=%d\n",a);
    printf("全局變量a=%d\n",::a); 
    printf("my域a=%d\n",my::a);
    printf("you域a=%d\n",you::a);
    printf("my域嵌套c=%d\n",my::one::c);
    return 0;
}

運行結果如下

[zyc@localhost lesion1]$ ./a.out 
局部變量a=10
全局變量a=100
my域a=12
you域a=1
my域嵌套c=200

總結:
1:當自定義域變成全局變量時且本來已經定義全局變量,訪問全局變量時,優先級:
全局變量高於自定義全局變量

2:如果沒有指定命名空間,需要在輸出時指定變量域

#include<iostream>
#include <stdio.h>
//using namespace std;//直接展開
int max=100;
int main()
{
    printf("%d\n",max);
    printf("%d\n",std::max(1,2));//直接指定輸出域
    return 0;
}

6:C++自動識別類型(但會發生截斷)

#include<iostream>
#include <stdio.h>
using namespace std;
int main()
{
    double d=1.11111111;

    cout<<"c++環境d="<<d<<endl;
    printf("C環境下d=%lf\n",d);
    return 0;
}

運行結果

c++環境d=1.11111
C環境下d=1.111111

總結:在C語言中,默認截斷位數爲6位,在C++中,默認截斷5位。並且輸出不需要指定類型。

7:C++函數重載(C++特有)

1)函數重載定義:

在同一個作用域中,如果有多個函數的名字相同,但是形參列表不同(參數類型不同或參數個數不同),返回值類型可同也可不同,我們稱之爲重載函數。

重載的函數是通過形參列表區分的,與返回值類型無關。函數重載其實是”一個名字,多種用法”的思想,不僅函數可以重載,運算符也可以重載。

2)函數重載過程

詳細過程見下面這篇博客
https://blog.csdn.net/gogogo_sky/article/details/72807123#0-qzone-1-40789-d020d2d2a4e8d1a374a433f596ad1440

8:缺省參數(備胎)

定義:在函數定義或創建時,給形參一個默認的參數,這樣即使在調用函數時即使沒有給函數實參,函數就默認剛纔設置的形參。

規則

1)缺省只能 從右往左缺省。
2)缺省值必須爲常量或全局變量 (const/static/普通的 全局變量 也可以作爲缺省參數)

3)缺省參數只能出現在聲明或者定義的一處
4)不能把 const的全局變量 作爲缺省值
5)缺省值不構成函數重載,缺省值並沒有賦予函數新的功能

如下:

#include<iostream>
using namespace std;
//缺省:全缺省,半缺省(從右往左連續缺省)
int Add(int a=1,int b=2)
{
    return a+b;
}
int main()
{
    cout<<Add(3,4)<<endl; //有實參,直接使用實參值
    cout<<Add(6)<<endl;//半缺省參數,另外一個形參默認b=2
    cout<<Add()<<endl;//全缺省參數,默認a=1,b=2
    return 0;
}

運行結果:

[zyc@localhost lesion1]$ ./a.out 
7
8
3

特別提醒:

(1)凡是出現利用缺省參數值作if判斷,並且判斷後實現代碼完全不同的,都應該分拆成兩個獨立的函數。

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