国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

從C語言到C++:C++入門知識(1)

這篇具有很好參考價值的文章主要介紹了從C語言到C++:C++入門知識(1)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

朋友們、伙計們,我們又見面了,本期來給大家解讀一下有關(guān)C++語言的相關(guān)知識點,如果看完之后對你有一定的啟發(fā),那么請留下你的三連,祝大家心想事成!

C 語 言 專 欄:C語言:從入門到精通

數(shù)據(jù)結(jié)構(gòu)專欄:數(shù)據(jù)結(jié)構(gòu)

個? 人? 主? 頁?:stackY、

?從C語言到C++:C++入門知識(1),C++,c++,新手入門

目錄

前言:

1. 什么是C++

2. C++的發(fā)展史

3. C++關(guān)鍵字(C++98)?

4.命名空間

4.1 命名空間定義?

4.2命名空間的使用

4.2.1命名空間使用的三種方式

5.輸入、輸出?

6.缺省參數(shù)

6.1缺省參數(shù)概念

6.2缺省參數(shù)的分類


前言:

在之前的所有的文章我都是用C語言的方式實現(xiàn)的各種代碼,那么本期往后我將會采用C++語言,那么在本期首先讓我們了解一下C++的基本發(fā)展以及C++相比C語言又需要注意的點,話不多說,我們直接開始:

1. 什么是C++

????????C語言結(jié)構(gòu)化和模塊化的語言,適合處理較小規(guī)模的程序。對于復(fù)雜的問題,規(guī)模較大的程序,需要高度的抽象和建模時,C語言則不合適。為了解決軟件危機, 20世紀(jì)80代, 計算機界提出了OOP(object oriented programming:面向?qū)ο?思想,支持面向?qū)ο?/strong>的程序設(shè)計語言應(yīng)運而生。
????????1982年,Bjarne Stroustrup博士在C語言的基礎(chǔ)上引入并擴充了面向?qū)ο?/strong>的概念,發(fā)明了一種新的程序語言。為了表達該語言與C語言的淵源關(guān)系,命名為C++。因此:C++是基于C語言而產(chǎn)生的,它既可以進行C語言的過程化程序設(shè)計,又可以進行以抽象數(shù)據(jù)類型為特點的基于對象的 程序設(shè)計,還可以進行面向?qū)ο蟮某绦蛟O(shè)計。

C++祖師爺:?本賈尼·斯特勞斯特盧普(Bjarne Stroustrup)

從C語言到C++:C++入門知識(1),C++,c++,新手入門

2. C++的發(fā)展史

1979年,貝爾實驗室的本賈尼等人試圖分析unix內(nèi)核的時候,試圖將內(nèi)核模塊化,于是在C
語言的基礎(chǔ)上進行擴展,增加了類的機制,完成了一個可以運行的預(yù)處理程序,稱之為
C with classes。
語言的發(fā)展就像是練功打怪升級一樣,也是逐步遞進,由淺入深的過程。我們先來看下C++的歷史版本。

?從C語言到C++:C++入門知識(1),C++,c++,新手入門

? ?階段 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 內(nèi)容
C with
classes
類及派生類、公有和私有成員、類的構(gòu)造和析構(gòu)、友元、內(nèi)聯(lián)函數(shù)、賦值運算符
重載等
C++1.0
添加虛函數(shù)概念,函數(shù)和運算符重載,引用、常量等
C++2.0
更加完善支持面向?qū)ο?,新增保護成員、多重繼承、對象的初始化、抽象類、靜
態(tài)成員以及 const 成員函數(shù)
C++3.0
進一步完善,引入模板,解決多重繼承產(chǎn)生的二義性問題和相應(yīng)構(gòu)造和析構(gòu)的處
C++98
C++ 標(biāo)準(zhǔn)第一個版本 ,絕大多數(shù)編譯器都支持,得到了國際標(biāo)準(zhǔn)化組織 (ISO) 和美
國標(biāo)準(zhǔn)化協(xié)會認(rèn)可, 以模板方式重寫 C++ 標(biāo)準(zhǔn)庫,引入了 STL( 標(biāo)準(zhǔn)模板庫 )
C++03
C++ 標(biāo)準(zhǔn)第二個版本,語言特性無大改變,主要:修訂錯誤、減少多異性
C++05
C++ 標(biāo)準(zhǔn)委員會發(fā)布了一份計數(shù)報告 (Technical Report , TR1) ,正式更名
C++0x ,即:計劃在本世紀(jì)第一個 10 年的某個時間發(fā)布
C++11
增加了許多特性,使得 C++ 更像一種新語言,比如:正則表達式、基于范圍 for
環(huán)、 auto 關(guān)鍵字、新容器、列表初始化、標(biāo)準(zhǔn)線程庫等
C++14
C++11 的擴展,主要是修復(fù) C++11 中漏洞以及改進,比如:泛型的 lambda
達式, auto 的返回值類型推導(dǎo),二進制字面常量等
C++17
C++11 上做了一些小幅改進,增加了 19 個新特性,比如: static_assert() 的文
本信息可選, Fold 表達式用于可變的模板, if switch 語句中的初始化器等
C++20
C++11 以來最大的發(fā)行版 ,引入了許多新的特性,比如: 模塊 (Modules) 、協(xié)
(Coroutines) 、范圍 (Ranges) 、概念 (Constraints) 等重大特性,還有對已有
特性的更新:比如 Lambda 支持模板、范圍 for 支持初始化等
C++23
制定 ing

3. C++關(guān)鍵字(C++98)?

C++總計63個關(guān)鍵字,C語言32個關(guān)鍵字
在C++中的關(guān)鍵字有一部分在C語言階段都以及接觸過了,所以就不對具體的關(guān)鍵字進行太多的解釋,在后續(xù)的學(xué)習(xí)中會細致解釋:
從C語言到C++:C++入門知識(1),C++,c++,新手入門

4.命名空間

?在了解命名空間前我們可以先來看一看在屏幕上打印 Hello World! 這個字符串,C++程序和C語言程序的不同

C語言程序:

//頭文件的包含
#include <stdio.h>

//主函數(shù)
int main()
{
	//打印函數(shù)
	printf("Hello World!\n");

	return 0;
}

C++程序:

//頭文件的包含
#include <iostream>

//命名空間的展開
using namespace std;

//主函數(shù)
int main()
{
	//打印
	cout << "Hello World!" << endl;
	return 0;
}

1. 兩者頭文件的包含有區(qū)別

2. C++中多了一個命名空間

3. 兩者輸出(打印)函數(shù)有區(qū)別

那么接下來就來了解一下C++中這個神奇的功能:命名空間

在C/C++中,變量、函數(shù)和后面要學(xué)到的類都是大量存在的,這些變量、函數(shù)和類的名稱將都存在于全局作用域中,可能會導(dǎo)致很多沖突。使用命名空間的目的是對標(biāo)識符的名稱進行本地化,避免命名沖突或名字污染,namespace關(guān)鍵字的出現(xiàn)就是針對這種問題。
#include <stdio.h>
#include <stdlib.h>

int rand = 10;

int main()
{
	//C語言沒辦法解決類似這樣的命名沖突問題,所以C++提出了namespace來解決
	printf("%d\n", rand);

	return 0;
}

這樣的程序是會報錯的(錯誤C2365??“rand”: 重定義;以前的定義是“函數(shù)”?),因為我們自己定義的變量rand和庫里面的rand名稱沖突,如果要解決就需要重新命名,那么在C++中就提出了namespace來解決這個問題。

4.1 命名空間定義?

定義命名空間,需要使用到namespace關(guān)鍵字,后面跟命名空間的名字,然后接一對{}即可,{} 中即為命名空間的成員。

1.正常的命名空間定義

命名空間中可以定義變量、函數(shù)、類型

//命名空間的名字是任意的,在這里我使用的是我的名字的縮寫

// 1. 正常的命名空間定義
namespace ywh
{
	// 命名空間中可以定義變量/函數(shù)/類型
	
	//變量
	int rand = 0;
	char ch = 'a';
	int a[10] = { 0 };

	//函數(shù)
	int Add(int x, int y)
	{
		return x + y;
	}

	//類型
	struct Node
	{
		int val;
		struct Node* next;
	};
}

?2.命名空間可以進行嵌套

//2. 命名空間可以進行嵌套
//Test.cpp
namespace N1
{
	int a;
	int b;
	int Add(int x, int y)
	{
		return x + y;
	}

	//進行嵌套
	namespace N2
	{
		int c;
		int d;
		int Sub(int x, int y)
		{
			return x - y;
		}
	}
}

3. 允許存在多個相同名稱的命名空間

頭文件Test.h

//3. 同一個工程中允許存在多個相同名稱的命名空間,編譯器最后會合成同一個命名空間中。
//Test.h
namespace N1
{
	int Mul(int x, int y)
	{
		return x * y;
	}
}
一個工程中的T est.h 和上面T est.cpp 中兩個 N1 會被合并成一個
*注意:
一個命名空間就定義了一個新的作用域 ,命名空間中的所有內(nèi)容都局限于該命名空間中。

4.2命名空間的使用

首先說明C++是兼容C語言的,所以在C++編譯文檔中也是可以使用C語言的。

定義好了命名空間,那么該怎么使用呢?看下面的代碼:

//命名空間的使用
namespace N1
{
	int a = 10;
	int b = 20;
	int Add(int x, int y)
	{
		return x + y;
	}
}

int main()
{
	printf("%d\n", a);
	return 0;
}

這段代碼在編譯的時候會報錯:“a”未聲明的標(biāo)識符。也就是說編譯器不認(rèn)識我們自己定義的命名空間,那么命名空間正確的使用方式是怎么樣的呢?

4.2.1命名空間使用的三種方式

1.加命名空間名稱及作用域限定符?

這里要使用到一個知識點:預(yù)作用限定符“ ::”,在這里它的作用是訪問命名空間成員,使用“ ::”可以指定要訪問的命名空間中的成員。

//命名空間的使用
namespace N1
{
	int a = 10;
	int b = 20;
	int Add(int x, int y)
	{
		return x + y;
	}
}

int main()
{
	//使用預(yù)作用限定符
	printf("%d\n", N1::a);
	return 0;
}

2.使用using將命名空間中某個成員引入

namespace N1
{
	int a = 10;
	int b = 20;
	int Add(int x, int y)
	{
		return x + y;
	}
}

//命名空間的使用
//部分展開
using N1::b;

int main()
{
	//使用預(yù)作用限定符
	printf("%d\n", N1::a);
	//使用using
	printf("%d\n", b);
	return 0;
}

3.使用using namespace 命名空間名稱 引入

namespace N
{
	int a = 1;
	int b = 0;
	int Add(int x, int y)
	{
		return x + y;
	}
}

//全部展開
using namespace N;

int main()
{
	printf("%d\n", b);
	printf("%d\n", Add(10,20));
	return 0;
}

看到這里我們就可以對C++代碼的第一行的代碼進行解讀:

using namespace std;

std是C++標(biāo)準(zhǔn)庫的命名空間,當(dāng)我們將std全部展開以后就可以直接用標(biāo)準(zhǔn)庫。

5.輸入、輸出?

?我們先來看看C++的輸入和輸出

#include<iostream>
// std是C++標(biāo)準(zhǔn)庫的命名空間名,C++將標(biāo)準(zhǔn)庫的定義實現(xiàn)都放到這個命名空間中
using namespace std;

int main()
{
	//輸入
	int a = 0;
	cin >> a;

	//輸出
	cout << "Hello world!!!" << endl;
	cout << "a = " << a << endl;
	return 0;
}

說明:

1. 使用 cout 標(biāo)準(zhǔn)輸出對象 ( 控制臺 ) cin 標(biāo)準(zhǔn)輸入對象 ( 鍵盤 ) 時,必須 包含 < iostream > 頭文件
以及按命名空間使用方法使用 std 。
2. cout cin 全局流對象, endl 是特殊的 C++ 符號,表示換行輸出,他們都包含在包含 <
iostream > 頭文件中。
3.<< 是流插入運算符, >> 是流提取運算符。
4.于C語言不同的是C++中的輸入和輸出是運算符,而C語言中的輸入和輸出是函數(shù)。
5.使用 C++ 輸入輸出更方便,不需要像 printf/scanf 輸入輸出時那樣,需要手動控制格式。
C++ 的輸入輸出可以自動識別變量類型。
#include <iostream>
using namespace std;
int main()
{
	int a;
	double b;
	char c;

	// 可以自動識別變量的類型
	cin >> a;
	cin >> b >> c;

	//自動識別類型
	cout << a << endl;
	cout << b << " " << c << endl;
	return 0;
}

6.缺省參數(shù)

6.1缺省參數(shù)概念

缺省參數(shù)是聲明或定義函數(shù)時為函數(shù)的參數(shù)指定一個缺省值。在調(diào)用該函數(shù)時,如果沒有指定實參則采用該形參的缺省值,否則使用指定的實參。
//         缺省參數(shù)          
void Func(int a = 1)
{
	cout << a << endl;
}
int main()
{
	// 沒有傳參時,使用參數(shù)的默認(rèn)值
	Func();
	// 傳參時,使用指定的實參
	Func(10); 
	return 0;
}

6.2缺省參數(shù)的分類

?1.全缺省

//全缺省參數(shù)
void Fun(int a = 10, int b = 20, int c = 30)
{
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl;
	cout << endl;
}

int main()
{
    // 顯示傳參,從左往右顯示傳參
	Fun();
    //傳一個參數(shù)默認(rèn)只能傳給第一個參數(shù)
	Fun(1);
	Fun(1, 2);
	Fun(1, 2, 3);
	//是不能這樣進行傳參的
	//Fun(1, , 3);

	return 0;
}

2.半缺省參數(shù)

//半缺省參數(shù)
//必須從右往左給缺省值
void Fun(int a, int b = 20, int c = 30)
{
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl;
	cout << endl;
}

int main()
{
	//半缺省不能傳空
	Fun(1);
	
	Fun(1, 2);
	Fun(1, 2, 3);

	return 0;
}

注意:

1.? 半缺省參數(shù)必須從右往左依次來給出,不能間隔著給。
2.? 缺省參數(shù)不能在函數(shù)和聲明中同時出現(xiàn)(聲明給,定義不給)。
3.??缺省值必須是常量或者全局變量 。
4.??C語言不支持(編譯器不支持)。

朋友們、伙計們,美好的時光總是短暫的,我們本期的的分享就到此結(jié)束,最后看完別忘了留下你們彌足珍貴的三連喔,感謝大家的支持!?文章來源地址http://www.zghlxwxcb.cn/news/detail-723454.html

到了這里,關(guān)于從C語言到C++:C++入門知識(1)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包