C++基礎(chǔ)一01

?一、C++語言概述

1 歷史背景

1)C++的江湖地位java、C、C++、python、C#

2)C++之父:Bjarne Stroustrup(1950--)

? ? ?1979,Cpre,為C語言增加類的機制

? ? ?1983,發(fā)布全新編程語言 C with class,后來命名為C++

? ? ?1985,CFont1.0 《The C++ Programming Language》

3)C++發(fā)展過程

1987,GNU C++

1990,Borland C++(BC編譯器)

1992,Microsoft C++(VC編譯器)IBM C++ ...

1998,ISO C++98

2003,對C++98進行修訂,C++03

2011,ISO C++11/C++0x

2014,ISO C++14

2017,ISO C++17*

2020 C++20

2 應(yīng)用領(lǐng)域

1.游戲開發(fā)?

2.科學(xué)計算?

3.網(wǎng)絡(luò)通信(ACE)

4.操作系統(tǒng)和設(shè)備驅(qū)動

5)其它...

3 C和C++

1)都是編譯型語言

2)都是強類型語言,但是C++更強

3)C++很大程度上兼容C,但是去掉了C中一些不好的特性

4)C++增加許多C中不具備的好的特性,比C程序更適合大型軟件的開發(fā)


二 第一個C++程序

1 編譯方式

1)gcc xx.cpp -lstdc++

2)g++ xx.cpp //推薦

2 文件擴展名

1).cpp //推薦

2).cxx

3).cc

4).C

3 頭文件

//包含標準C++中所有和I/O相關(guān)的類型、對象和函數(shù)

#include<iostream>

注:在C++中標準C的頭文件依然可以使用

#include<stdio.h>==> #<cstdio>

#include<stdio.h>==> #include<cstdlib>

#include<stdio.h>==> #include<cstring>

...

4 標準輸入和輸出

1)cin對象表示標準輸入//類似scanf

eg:

int num;

scanf("%d",&num);//c中

cin >> num;//c++中

其中“>>”稱為提取操作符

----------------------------

int i;

double d;

scanf("%d%lf",&i,&d);//C

cin >> a >> d;//C++

2)cout對象表示標準輸出//類似printf

eg:

int num = 1234;

printf("num=%d\n",num);//C

cout << "num=" << num << endl;//C++

其中"<<"稱為插入操作符

注:endl==>“\n”

----------------------------------

int i = 100;

double d = 3.14;

printf("%d,%lf\n",i,d);

cout << i << ',' << d << endl;

5 "std::"標準名字空間

? C++標準庫中的所有函數(shù)、變量、類型都是在std空間中

三 名字空間(namespace)

1 名字空間作用

1)避免名字沖突

2)劃分邏輯單元

2 定義名字空間

namespace 名字空間{

名字空間成員1;

名字空間成員2;

...

名字空間成員n;

}

注:名字空間成員可以是全局變量、函數(shù)、類型、名字空間

eg:

namespace ns1{

int num = 100;

void func(...){...}

struct Student{...};

namespace ns2{...};

}

3 名字空間成員的使用

1)通過作用域限定操作符 "::"

空間名::要訪問的成員;

eg:

int main(void){

//空間里面成員不能直接訪問

//cout << num << endl;//error

//通過“::”訪問空間里面的成員

cout << ns1::num << endl;//ok

}

2)名字空間指令

using namespace 名字空間名;

在該條指令以后的代碼中,指定名字空間中的成員都可見,可以直接訪問,省略"空間名::".

常用場景:using namespace std;

以后在使用標準名字空間里面的成員可以省略"std::"

eg:

int main(void){

using namespace ns1;//名字空間指令

cout << num << endl;//ok

}

3)名字空間聲明

using 名字空間名::名字空間成員;

將名字空間中特定的一個成員引入當前作用域,在該作用域訪問這個成員就如同訪問局部的成員一樣,可以直接訪問,省略“空間名::”。

eg:

int main(void){

using ns1::num;//名字空間聲明

cout << num << endl;//ok

}

4 無名名字空間

? 不屬于任何名字空間的標識符,將被編譯器自動的放入無名名字空間中,無名空間里面的成員正??梢灾苯釉L問,但是當無名空間的成員和局部的標識符名字一樣時,局部優(yōu)先,這時如果還希望訪問無名空間的成員,可以使用作用域限制操作符:"::要訪問的成員"。


5 名字空間嵌套//了解

eg:

namespace ns1{

int num = 100;

namespace ns2{

int num = 200;

namespace ns3{

int num = 300;

}

}

}

cout << ns1::num << endl;//100

cout << ns1::ns2::num << endl;//200

cout << ns1::ns2::ns3::num << endl;//300

四 C++的結(jié)構(gòu)體、聯(lián)合體、枚舉

1 C++結(jié)構(gòu)體

1)定義結(jié)構(gòu)體變量可以省略struct關(guān)鍵字

2)在C++結(jié)構(gòu)體中可以直接定義函數(shù),稱為成員函數(shù)(方法),在成員函數(shù)中可以直接訪問其它成員.

eg:

struct Student{...};

struct Stduent s;

typedef struct Stduent STU;

STU s2;

-------------------

struct Student{...};

Student s;

2 聯(lián)合體//了解

1)定義聯(lián)合體變量可以省略union關(guān)鍵字

2)支持匿名聯(lián)合

3 枚舉

1)定義枚舉變量時enum關(guān)鍵字可以省略

2)C++中枚舉類型不能當做整型數(shù)直接來用

eg:

0 --> RUN

1 --> SLEEP

2 --> STOP

enum STATE{RUN,SLEEP,STOP};

/*enum*/ STATE s;

s = 1;//C:ok? C++:error

s = SLEEP;//C:ok C++:ok

五 字符串

1 回顧C中的字符串

1)雙引號常量字符串: "hello"

2)字符指針:char*

3)字符數(shù)組:char[]

2 C++中兼容C的字符串的同時,增加了string類型專門表示字符串。

1)定義字符串

? string s;//定義一個空字符串

? string s = "hello";//定義字符串同時初始化


? //下面兩種寫法和上面寫法等價

? string s = string("hello");

? string s("hello");


2)字符串拷貝: =

string s1 = "hello";

string s2 = "jiangguiliang";

s1 = s2;//拷貝

cout << s1 << endl;//"jiangguiliang"

3)字符串連接:+ +=

string s1 = "hello";

string s2 = " world";

string s3 = s1 + s2;

cout << s3 << endl;//hello world

s1 += s2;//s1 = s1 + s2;

cout << s1 << endl;//hello world

4)字符串比較:== != > < >= <=

string s1 = "hello";

if(s1 == "hello"){//1:邏輯真

...

}

if(s1 > "Jiangguiliang"){//1:邏輯真

...

}

5)獲取字符串中某個字符: []

string s1 = "hello";

cout << s1[0] << endl;//'h'

s1[0] = 'H';

cout << s1 << endl;//Hello

6)string類型中常用的成員函數(shù)

size()/length() :獲取字符串的長度

c_str() :將string轉(zhuǎn)換為C中const char*字符串

string s = "hello";

s.size();//5

s.length();//5

const char* p = s.c_str();

推薦書籍:

《C++程序設(shè)計原理與實踐》

?《C++ Primer》

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容