前言:什麼是C++
C++是基於C語言而產生的,它既可以進行C語言的過程化程序設計,又可以進行以抽象數據類型爲特點的基於對象的程序設計,還可以進行面向對象的程序設計。
第一章:C++入門
1. 命名空間
爲了更好的避免在工作之中分模塊工作發生函數和變量的命名衝突,我們引入了命名空間的概念,一個命名空間就定義了一個新的作用域,命名空間中的所有內容都侷限於該命名空間之中,不會和其他變量或函數造成同名衝突。
- 命名空間的定義:定義命名空間,需要使用到
namespace
關鍵字,在後面跟上命名空間的名字,然後接一對{ }
,在大括號之中的內容即爲命名空間的成員。
//1. 普通的命名空間
namespace N1 // N1爲命名空間的名稱
{
// 命名空間中的內容,既可以定義變量,也可以定義函數
int a;
int Add(int left, int right)
{
return left + right;
}
}
//2. 命名空間可以嵌套
namespace N2
{
int a;
int b;
int Add(int left, int right)
{
return left + right;
}
namespace N3
{
int c;
int d;
int Sub(int left, int right)
{
return left - right;
}
}
}
//3. 同一個工程中允許存在多個相同名稱的命名空間,編譯器最後會合成同一個命名空間中。
// 相同的命名空間之中不能夠重複定義變量和函數
namespace N1
{
int Mul(int left, int right)
{
return left * right;
}
}
- 命名空間的使用方式
命名空間+ :: + 成員
(也是比較推薦的一種方式)N1 ::Mul(left,right)
引入成員 using + 命名空間 + ::+ 成員
後面使用成員時,不需要加作用域,這樣也將會直接導致成員暴露在全局域之中,(如果全局域中有同名的成員,將會導致成員衝突)using N2::a
展開命名空間 using + 命名空間
命名空間中所有成員暴露在全局域中,和第二種方式一樣,需要注意的同上!using namespace N1
2. C++輸入&輸出
- 在編寫C++程序需要進行輸入輸出時:需要包含的頭文件
#include <iostream>
using namespace std;
- 輸入輸出的標準格式
輸入:cin>>b>>a
輸出:cout<<a<<b<<endl
(endl
換行符)
- 不需要顯示指定輸入輸出變量的格式,比如整形,字符的%d %c。
- 支持連續的輸入輸出
- 字符串和非字符串輸出
int a = 10 ;
char* p = "1234";
int* pa = &a;
std::cout << pa << std::endl; //非字符串指針輸出地址
std::cout << p << std::endl; //字符串指針輸出內容
3. 缺省參數
- 缺省參數是聲明或定義函數時爲函數的參數指定的一個默認值。在調用該函數時,如果沒有指定實參則採用該默認值,否則使用指定的實參。
void TestFunc(int a = 0)
{
cout<<a<<endl;
}
int main()
{
TestFunc(); // 沒有傳參時,使用參數的默認值
TestFunc(10); // 傳參時,使用指定的實參
}
- 缺省參數分類
全缺省參數
void TestFunc(int a = 10, int b = 20, int c = 30)
{
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
cout<<"c = "<<c<<endl;
}
半缺省參數
void TestFunc(int a, int b = 10, int c = 20)
{
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
cout<<"c = "<<c<<endl;
}
- 半缺省參數必須從右往左依次來給出,不能間隔的給
- 缺省參數不能在函數聲明和定義之中同時出現。
- 缺省值必須時常量或者是全局變量
- C語言不支持
//a.h
void TestFunc(int a = 10);
// a.c
void TestFunc(int a = 20)
{
}
// 注意:如果聲明與定義位置同時出現,恰巧兩個位置提供的值不同,那編譯器就無法確定到底該用那個缺省值。