?????歡迎來到 Claffic 的博客?????
? ??專欄:《是C++,不是C艸》??
前言:?
在認(rèn)識了C++的來歷之后,我們就要開始正式學(xué)習(xí)C++了,系好安全帶,準(zhǔn)備出發(fā)!
注:
你最好是學(xué)完了C語言,并學(xué)過一些初階的數(shù)據(jù)結(jié)構(gòu)。
Part1:給C++打個招呼
1.Hello,cpp!
從創(chuàng)建項目開始,添加項的時候終于不用刪pp了??
我上來就是?。。∫粋€左正蹬...,額不,一個C++程序:
#include<iostream>
using namespace std;
int main()
{
cout << "Hello,cpp!" << endl;
return 0;
}
唱跳rap籃球 + F5:
你乍一看這代碼,好像熟悉又陌生... ...
說熟悉吧,int main()? return 0;?是明白的,跟C語言的一模一樣;
說陌生,<iostream>是啥?using... ? 還有 cout , endl,不認(rèn)識。
開始懷念C語言了:
#include<stdio.h>
int main()
{
printf("Hello,cpp!\n");
return 0;
}
輸出相同:?
既然結(jié)果相同,那兩種寫法每個語句之間是不是有一些微妙的關(guān)系?
欸,繼續(xù)向下看,你會找到答案。
2.關(guān)鍵字
C++總計63個關(guān)鍵字,C語言32個關(guān)鍵字
下面是C++關(guān)鍵字的匯總表,你大體見見模樣即可:
C++的關(guān)鍵字的豐富感有沒有?
Part2:命名空間(namespace)
1.為何而來?
不知道大家在C語言中有沒有這樣的經(jīng)歷:
不小心把自己的變量名設(shè)置成C語言的關(guān)鍵字/函數(shù)名了,導(dǎo)致命名沖突;?
上一個例子惡心你??:
#include <stdio.h>
#include <stdlib.h>
int rand = 114514;
int main()
{
printf("%d\n", rand); // stdlib.h 里的 rand 還是 全局中定義的 rand ?
return 0;
}
報錯:?
命名空間基本上就是為了解決這個問題的:
使用命名空間的目的是對標(biāo)識符的名稱進(jìn)行本地化 ,以 避免命名沖突或名字 污染。
知道 namespace 對C語言的改善作用了吧。
2.命名空間的定義
一圖就懂:
那命名空間的成員可以是什么?
如:?
namespace Claffic
{
// 定義變量
int x = 10;
// 定義函數(shù)
int Add(int left, int right)
{
return left + right;
}
// 定義結(jié)構(gòu)體類型
struct Node
{
int val;
struct Node* next;
};
}
你以為到這就結(jié)束了?
不,命名空間還可以嵌套
// 命名空間可以嵌套
// Test.cpp
namespace N1
{
int a;
int b;
int Add(int x, int y)
{
return x + y;
}
namespace N2 // 被N1嵌套在內(nèi)
{
int c;
int d;
int Sub(int x, int y)
{
return x - y;
}
}
}
而且而且,
同一個工程中允許存在多個相同名稱的命名空間,編譯器最后會合成同一個命名空間中
// Test.h
namespace N1
{
int Mul(int x, int y)
{
return x * y;
}
}
ps:一個工程中的test.h和上面test.cpp中兩個N1會被合并成一個?
3.命名空間的使用
這里定義一個命名空間:
namespace Claffic
{
int a = 0;
int b = 1;
int Add(int x, int y)
{
return x + y;
}
struct Node
{
int val;
struct Node* next;
};
}
如果我們想全局變量那樣直接使用,會出現(xiàn)錯誤:
打開方式不對... ...?
命名空間的使用呢,有三種方式:
??加命名空間名稱及作用域限定符
命名空間名稱 :: 要使用成員
int main()
{
printf("%d\n", Claffic::a);
return 0;
}
??使用using將命名空間中某個成員引入 ?
using 命名空間名稱 :: 要使用成員
using Claffic::a;
int main()
{
printf("%d\n", a);
return 0;
}
using namespace 命名空間名稱
using namespace Claffic;
int main()
{
printf("%d\n", a);
printf("%d\n", b);
Add(2, 3);
return 0;
}
這種用法可以使用命名空間中的所有成員;
看到這里,是不是覺得似曾相識?
在跟C++打招呼的時候,開頭就用了這種命名空間使用,std 就是標(biāo)準(zhǔn)庫中的一個命名空間,
包含了相應(yīng)的頭文件并且引用了它,就可以使用其中的 cout 和 endl,
不賣關(guān)子了,直接告訴你吧,endl 就相當(dāng)于 \n ,換行符;
至于 cout 嘛,嘿嘿,下面講的就是它:
Part3:C++輸入和輸出
1.標(biāo)準(zhǔn)輸入輸出
cout // 標(biāo)準(zhǔn)輸出
cin // 標(biāo)準(zhǔn)輸入
有了這些還不夠,還有兩個像大于/小于號的東西:
int a = 0;
cin >> a;
cout << "abcdef" << a << endl;
二者是這樣配合使用的。
與C語言相比,是不是輸入輸出更加方便了?
?
2.std 命名空間的使用慣例
using namespace std 就是一種使用方式,
這種使用方式就很方便,適合日常的練習(xí)。
但是在項目開發(fā)中,代碼多,規(guī)模大,就容易出現(xiàn)命名沖突的問題,
所以在這種情況下,建議指定使用的命名空間:
using std::cin;
using std::cout;
Part4:溯源
“溯源”大題小用??????
其實(shí)就是再看篇頭那段代碼:
#include<iostream>
using namespace std;
int main()
{
cout << "Hello,cpp!" << endl;
return 0;
}
到這里,我相信你已經(jīng)能夠解讀這一段代碼了:
#include<iostream> // 引用頭文件
using namespace std; // 展開std命名空間
// 二者配合使用,可用cout,endl關(guān)鍵字
cout << "Hello,cpp!";
// 標(biāo)準(zhǔn)輸出,配合 << (流提取運(yùn)算符)使用
endl 相當(dāng)于C語言中的 '\n' 換行符
總結(jié):?
這期博客,以 Hello cpp 起,Hello cpp 收,帶大家寫下了第一個C++程序,并向大家解釋了命名空間和輸入輸出等重要知識內(nèi)容,你學(xué)的怎么樣呢?
碼文不易?文章來源:http://www.zghlxwxcb.cn/news/detail-442454.html
如果你覺得這篇文章還不錯并且對你有幫助,不妨支持一波哦????????文章來源地址http://www.zghlxwxcb.cn/news/detail-442454.html
到了這里,關(guān)于【是C++,不是C艸】 第一個C++程序 | 命名空間 | 輸入輸出的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!