快捷做網(wǎng)站網(wǎng)絡(luò)營(yíng)銷的基本功能
目錄
C++關(guān)鍵字
C++命名空間
命名空間的介紹
域作用限定符
命名空間的使用
C++的輸入以及輸出
C++中的缺省參數(shù)
缺省參數(shù)的介紹
缺省參數(shù)的使用
缺省參數(shù)的分類
全缺省參數(shù)
半缺省參數(shù)
C++關(guān)鍵字
在C++中,有63個(gè)關(guān)鍵字,而C語言只有32個(gè)關(guān)鍵字
asm do if return try continue auto double inline short typedef for
bool dynamic_cast int signed typeid public break else long sizeof typename
throw case enum mutable static union wchar_t catch explicit namespace
static_cast unsigned default char export new struct using friend class extern operator switch virtual register const false private template void true
const_cast float protected this volatile while delete goto reinterpret_cast
📌
這些關(guān)鍵字不需要死記硬背
C++命名空間
命名空間的介紹
在C++中,變量、函數(shù)和類都是大量存在的,這些變量、函數(shù)和類的名稱將都存在于全局作用域中,可能會(huì)導(dǎo)致很多沖突。而使用命名空間的目的是對(duì)標(biāo)識(shí)符的名稱進(jìn)行本地化,以避免命名沖突或名字污染,namespace
關(guān)鍵字的出現(xiàn)就是針對(duì)這種問題的,而定義一個(gè)命名空間就相當(dāng)于定義了一個(gè)新的作用域,命名空間中的所有內(nèi)容都局限于該命名空間中
例如,在C語言中,對(duì)于下面的程序
#include <stdio.h>
#include <stdlib.h>int rand = 10;int main()
{printf("%d\n", rand);return 0;
}
報(bào)錯(cuò)內(nèi)容:
“rand”: 重定義;以前的定義是“函數(shù)”
因?yàn)樵贑語言中,存在一個(gè)名為rand()
的函數(shù),此時(shí)若將變量名定義為rand
會(huì)與標(biāo)準(zhǔn)庫中rand()
函數(shù)名產(chǎn)生沖突,而C語言能解決這個(gè)問題方法只有更改變量名,否則沒有其他辦法
但是在C++中,可以使用命名空間解決這個(gè)問題
所謂命名空間指當(dāng)前命名的變量所處的空間,在命名空間中,可以聲明變量/類型/函數(shù),例如
//命名空間1
namespace test1
{//變量int i = 0;//類型struct Student{int age;char name[20];};//函數(shù)int add(int x, int y){return x + y;}
}
在C++中,使用namespace
關(guān)鍵字創(chuàng)建命名空間,語法如下:
namespace 命名空間名
{//變量/函數(shù)/類型
}//注意最后一行不需要分號(hào),不同于結(jié)構(gòu)體
在C++中,命名空間可以嵌套定義,例如:
//命名空間2
namespace test2
{int num = 0;//命名空間3namespace test3{int num = 0;}
}
對(duì)于上面的代碼,在命名空間test2
中嵌套定義了一個(gè)命名空間test3
有了命名空間,就可以解決上面C語言出現(xiàn)的問題,解決方法如下:
//頭文件NameSpace.h中的命名空間4
//將rand變量放入命名空間test4中
namespace test4
{int rand = 10;
}//測(cè)試文件
//C++主函數(shù)
#include <iostream>
#include <stdlib.h>
#include "NameSpace.h"int main()
{//調(diào)用命名空間4中的rand變量,而不是標(biāo)準(zhǔn)庫中的rand()函數(shù)printf("%d\n", test4::rand);return 0;
}
輸出結(jié)果:
10
域作用限定符
在C++中,::
表示域作用限定符,使用方法如下:
空間 :: 變量/類型/對(duì)象名
當(dāng)::
左側(cè)空間為空時(shí),默認(rèn)在全局中尋找::
右側(cè)的內(nèi)容,例如:
//NameSpace.h文件中的命名空間2與嵌套的命名空間3
//命名空間2
namespace test2
{int num = 20;//命名空間3namespace test3{int num = 30;}
}//C++主函數(shù)
#include <iostream>
#include <stdlib.h>
#include "NameSpace.h"//全局變量
int num = 10;int main()
{//域作用限定符//局部變量int num = 0;printf("%d\n", num);//全局變量printf("%d\n", ::num);//指定命名空間的變量printf("%d\n", test2::num);//嵌套的命名空間的變量printf("%d\n", test2::test3::num);return 0;
}
輸出結(jié)果:
0
10
20
30
命名空間的使用
在C++中,有三種使用命名空間的方法:
- 加命名空間名稱及作用域限定符,例如
N::a
- 使用
using
將命名空間中某個(gè)成員引入,也稱部分展開,例如using N::a
- 使用
using
將命名空間整體引入,也稱全局展開,例如using namespace N
測(cè)試實(shí)例:
//NameSpace.h中的命名空間1
namespace test1
{//變量int i = 10;//類型struct Student{int age;char name[20];};//函數(shù)int add(int x, int y){return x + y;}
}//加命名空間名稱及作用域限定符
#include <iostream>
#include "NameSpace.h"int main()
{printf("%d", test1::i);return 0;
}
輸出結(jié)果:
10//部分展開
#include <iostream>
#include "NameSpace.h"
using test1::i;int main()
{printf("%d", i);return 0;
}
輸出結(jié)果:
10//全局展開
#include <iostream>
#include "NameSpace.h"
using namespace test1;int main()
{printf("%d\n", i);return 0;
}
輸出結(jié)果:
10
💡
在實(shí)際使用過程中,更推薦指定以及部分展開,如果只是自己練習(xí)時(shí),更推薦使用全局展開
注意,使用 using namespace N
并不代表在函數(shù)中不可以指定,部分展開和全局展開都只是改變尋找方式,并不是使用了其中一種方式其他方式不可以再使用,只是大范圍會(huì)包括小范圍,而如果已經(jīng)全局展開,那么再指定將直接去指定的命名空間找,而不是在全局展開的命名空間中找
當(dāng)存在兩個(gè)相同的命名空間時(shí),會(huì)被合并成一個(gè)命名空間,而不是直接覆蓋,例如
//NameSpace.h中的兩個(gè)重名的命名空間
//兩個(gè)同名的命名空間
namespace test5
{int num1 = 10;
}namespace test5
{int num2 = 20;
}//測(cè)試文件
//同名命名空間合并
#include <iostream>
#include "NameSpace.h"
using namespace std;
using namespace test5;int main()
{cout << test5::num1 << endl;cout << test5::num2 << endl;return 0;
}
輸出結(jié)果:
10
20
C++的輸入以及輸出
在C++中,可以使用cout
和cin
配合流插入運(yùn)算符<<
和流提取運(yùn)算符>>
使用,例如:
💡
使用cout
和cin
時(shí)需要包含頭文件iostream
,注意C++的標(biāo)準(zhǔn)庫頭文件不包含不帶有.h
,并且需要引入命名空間std
(C++中的標(biāo)準(zhǔn)命名空間)或者直接指定。因此推薦使用<iostream>+std
的方式
//C++的輸入和輸出
#include <iostream>
using namespace std;int main()
{int num = 0;cout << "請(qǐng)輸入數(shù)值:";cin >> num;cout << num << endl;return 0;
}
輸入:
10
輸出結(jié)果:
請(qǐng)輸入數(shù)值:10
10
在上面的代碼中,定義了一個(gè)num
變量,通過標(biāo)準(zhǔn)輸入對(duì)象cin
和流提取運(yùn)算符>>
控制變量num
的輸入,不同于C語言,此處輸入可以不需要取地址運(yùn)算符&
,對(duì)變量?jī)?nèi)容的輸出使用標(biāo)準(zhǔn)輸出對(duì)象cout
和流插入運(yùn)算符<<
控制內(nèi)容的輸出,而endl
表示換行符,作用效果類似'\n'
在C++中,輸入和輸出可以自動(dòng)識(shí)別變量類型,故輸出和輸入不需要占位符
#include <iostream>
using namespace std;int main()
{//int num = 0;//cout << "請(qǐng)輸入數(shù)值:";//cin >> num;//cout << num << endl;int num = 0;double num1 = 0;char c = 0;cin >> num >> num1 >> c;//多組內(nèi)容的輸入,相當(dāng)于scanf("%d%lf%c", &num, &num1, &c);cout << num << ' ' << num1 << ' ' << c;//多組內(nèi)容輸出,相當(dāng)于printf("%d %f %c", num, num1, c);return 0;
}
輸入:
1 2.5 c
輸出結(jié)果:
1 2.5 c
📌
同scanf
一樣,cin
會(huì)自動(dòng)忽略空白字符
- 也可以使用指定的方式使用
cout
和cin
//C++的輸入和輸出
#include <iostream>int main()
{int num = 0;std::cin >> num;std::cout << num << std::endl;return 0;
}
輸入:
10
輸出:
10
C++中的缺省參數(shù)
缺省參數(shù)的介紹
在C++中,缺省參數(shù)是指在函數(shù)的定義以及聲明中可以為形式參數(shù)賦值,例如
int add(int x = 0, int y = 0)
{return (x + y);
}
在上面的代碼中,變量x
和變量y
賦值為0,稱x
和y
為缺省參數(shù),兩個(gè)0為兩個(gè)缺省參數(shù)的缺省值,缺省值必須是常量或者全局變量
如果調(diào)用add
函數(shù)時(shí)不傳入實(shí)際參數(shù)或者同類型數(shù)值時(shí),則add
函數(shù)直接使用缺省參數(shù)的數(shù)值進(jìn)行計(jì)算,例如
#include <iostream>
using namespace std;int add(int x = 0, int y = 0)
{return (x + y);
}int main()
{//調(diào)用add函數(shù)不傳參數(shù)cout << add() << endl;//調(diào)用add函數(shù)傳一個(gè)參數(shù)cout << add(1) << endl;//調(diào)用addd函數(shù)傳兩個(gè)參數(shù)cout << add(1, 2) << endl;return 0;
}
輸出結(jié)果:
0
1
3
缺省參數(shù)的使用
在C++中,缺省參數(shù)有兩種,第一種是全缺省參數(shù),第二種是半缺省參數(shù)
在使用缺省參數(shù)時(shí),必須遵循從右往左連續(xù)使用,不可以跳躍式使用,例如對(duì)于下面的函數(shù):
int add(int x = 0, int y = 0, int z = 0)
{return (x + y);
}
使用時(shí)滿足從右往左使用
//缺省參數(shù)
#include <iostream>
using namespace std;int add1(int x = 0, int y = 0, int z = 0)
{return (x + y);
}int main()
{//使用缺省參數(shù)時(shí)必須從右往左連續(xù)使用//正確使用方法add1(1, 2);//使用第三個(gè)缺省參數(shù)add1(1);//使用第二個(gè)和第三個(gè)缺省參數(shù)add1();//使用全部缺省參數(shù)add1(1, 2, 3);//不使用缺省參數(shù)//錯(cuò)誤使用方法add1(1, , 2);//不可以直接使用第二個(gè)缺省參數(shù)add1(, 1, 2);//不可以直接使用第一個(gè)缺省參數(shù)add1(, , 1);//不可以直接使用第一個(gè)和第二個(gè)缺省參數(shù)add1(, 1, );//不可以直接使用第一個(gè)和第三個(gè)缺省參數(shù)return 0;
}
📌
“從右往左使用”意思是,當(dāng)調(diào)用函數(shù)給函數(shù)傳遞實(shí)際參數(shù)時(shí),第一個(gè)實(shí)參對(duì)應(yīng)著第一個(gè)第一個(gè)形參,第二個(gè)實(shí)參對(duì)應(yīng)著第二個(gè)形參,第三個(gè)實(shí)參對(duì)應(yīng)著第三個(gè)形參,使用缺省參數(shù)時(shí),當(dāng)只傳遞一個(gè)實(shí)際參數(shù)時(shí),該實(shí)際參數(shù)對(duì)應(yīng)著第一個(gè)形參,此時(shí)使用第二個(gè)和第三個(gè)缺省參數(shù),同理,當(dāng)傳遞兩個(gè)實(shí)際參數(shù)時(shí),兩個(gè)實(shí)際參數(shù)對(duì)應(yīng)的前兩個(gè)形參,使用第三個(gè)缺省參數(shù),即總是滿足最右邊的缺省參數(shù)是第一個(gè)使用的
“連續(xù)使用”意思是,給函數(shù)傳遞實(shí)際參數(shù)到形參時(shí),不能出現(xiàn)類似于第一個(gè)實(shí)際參數(shù)傳給第一個(gè)形參,第二個(gè)實(shí)際參數(shù)不傳內(nèi)容,第三個(gè)實(shí)際參數(shù)傳遞給形參等間隔性的傳遞
缺省參數(shù)的分類
在C++中,缺省參數(shù)分為
- 全缺省參數(shù)
- 半缺省參數(shù)
全缺省參數(shù)
全缺省參數(shù)是指在函數(shù)聲明或定義時(shí),所有變量都是缺省參數(shù),例如
int add1(int x = 0, int y = 0, int z = 0)
{return (x + y);
}
半缺省參數(shù)
半缺省參數(shù)是指在函數(shù)聲明或定義中,部分變量是缺省參數(shù),例如
int add1(int x, int y = 0, int z = 0)//只有y和z是缺省變量
{return (x + y);
}
半缺省參數(shù)中,必須滿足從右往左依次連續(xù)給出,不可以跳躍式給缺省參數(shù)(由于從右往左使用的原則),不是缺省變量的需要在調(diào)用時(shí)傳遞實(shí)際參數(shù),例如
//半缺省參數(shù)
int add2(int x, int y = 0, int z = 0)
{return (x + y);
}int add3(int x, int y, int z = 0)
{return (x + y);
}//不可以跳躍式給缺省值
int add4(int x = 0, int y, int z)
{return (x + y);
}int add5(int x, int y = 0, int z)
{return (x + y);
}int main()
{add2(1);//只有一個(gè)不是缺省參數(shù)時(shí),必須為該形參傳遞實(shí)參add3(1, 2);//有兩個(gè)不是缺省參數(shù)時(shí),必須為兩個(gè)形參傳遞實(shí)參add4(, 2, 3);//不可以使用,需要滿足從右往左使用缺省參數(shù)的原則add5(1, , 3);//不可以使用,需要滿足從右往左使用缺省參數(shù)的原則return 0;
}
聲明和定義函數(shù)缺省參數(shù)時(shí),一般建議聲明時(shí)給缺省參數(shù)和缺省值,而定義時(shí)不給缺省值,例如
//NameSpace.h中的函數(shù)聲明
int add6(int a = 20);//測(cè)試文件
//定義不給缺省值
int add6(int a)
{return a;
}#include <iostream>
#include "NameSpace.h"
using namespace std;int main()
{cout<<add6(2)<<' ';cout<<add6()<<'\n';return 0;
}
輸出結(jié)果:
2 20