系列前言
本系列博文僅為博主個人學習筆記,通過博客理清學習思路用于復習,如有記述不周到的地方請諒解;如能指出,更加感謝,
文章目錄
- C++準備
- 創建C++檔案
- C++基本兼容C的語法
- 第一個C++程式
- 命名空間
- 作用
- 用例
- 注意事項
- 命名空間中使用重名庫函式
- 命名空間的嵌套
- 同名命名空間的自動合并
- 命名空間的使用
- 指定訪問
- 展開訪問
- 指定某個變數展開后訪問
- I/O流
- 輸出cout
- 示例一
- 示例二
- 輸入cin
- 預設引數
- 全預設引數
- 半預設半數
- 函式多載
- 參考(1)
- 什么是參考
- 參考的特性
- 常參考
C++準備
創建C++檔案
解決方案語言選擇C++,源檔案后綴選擇.cpp
c p p = c plus plus = c + +
C++基本兼容C的語法
#include<stdio.h>
int main()
{
printf("Hello World\n");
return 0;
}
上面的程式在C++的編譯器里是完全可以執行的
第一個C++程式
#include<iostream>
using namespace std;
int main()
{
cout << "hello world" << endl;
return 0;
}
結果與前一個程式一樣
為了看懂這個程式引入命名空間和I/O流的概念
命名空間
作用
解決命名沖突的問題
int printf = 0;
c語言無法定義以C庫函式或關鍵字為名字的變數
C++提供了一種解決辦法——命名空間
用例
#include<stdio.h>
#include<math.h>
namespace ytx
{
int scanf = 0;
int printf = 0;
}
namespace hxy
{
int scanf = 1;
int printf = 1;
void f()
{
::printf("hello world\n");
}
}
int main()
{
printf("%d\n", ytx::scanf);
printf("%d\n", ytx::printf);
printf("%d\n", hxy::scanf);
printf("%d\n", hxy::printf);
hxy::f();
return 0;
}
陳述句模板
namespace 空間名
{
定義變數;
定義函式;
}
int main()
{
空間名::空間中定義的變數名 //參考變數
空間名::函式名(形式引數型別 形式引數名) //參考函式
}
注意事項
命名空間中使用重名庫函式
::庫函式名(::前沒有東西就表示是整體空間)
命名空間的嵌套
#include<stdio.h>
#include<math.h>
namespace ytx
{
int scanf = 0;
int printf = 0;
namespace hxy
{
int scanf = 1;
int printf = 1;
void f()
{
::printf("hello world\n");
}
}
}
int main()
{
printf("%d\n", ytx::scanf);
printf("%d\n", ytx::printf);
ytx::hxy::f();
return 0;
}
訪問陳述句
母空間名::子空間名::函式名/變數名
同名命名空間的自動合并
在程式中不同位置定義的同名命名空間的內容會進行合并
命名空間的使用
命名空間的使用有三種方式
指定訪問
空間名::函式名/變數名
展開訪問
using namespace 空間名;
后面呼叫函式和變數不在需要指定訪問
缺點是失去了區分功能,命名空間暴露出來了
指定某個變數展開后訪問
using 空間名::變數名/函式名
后面呼叫這個變數或函式的時候不需要指定訪問
I/O流
輸出cout
示例一
#include<iostream>
using namespace std;
int main()
{
cout << "Hello world!!!" << endl;
return 0;
}
上面是我們一開始寫的第一個C++程式
下面逐句分析
#include<iostream>
引出I/O流頭檔案
using namespace std;
展開std空間,std是C++庫的namespace,C++中的所有東西都是放到std命名空間中的東西
后面使用的cout、endl是屬于std標準庫中的,所以先展開std命名空間
cout << "Hello world!!!" << endl;
cout是輸出的意思,表示輸出流的物件,<<表示后面的陳述句“流向”它,endl表示換行,這句話的作用類似于printf(“Hello world!!!\n”);但是優點很明顯,那就是cout陳述句不需要寫出資料型別,系統會自動識別
示例二
int a = 1;
double b = 1.11;
cout << a << "," << b << endl;
return 0;
輸入cin
cin>>a>>b;
功能近似于
scanf("%d%d",&a,&b);
區別是cin也可以自動識別資料型別
預設引數
初始化函式中的形式引數,如果呼叫函式實際引數已經給了值,那么就用不到預設引數,如果并沒有給值,預設引數的值就是函式中形參的初始值
形象的來看,預設引數就是一個“備胎”
#include<iostream>
using namespace std;
void f(int a = 0)
{
cout << a * a << endl;
}
int main()
{
f(2);
f();
return 0;
}

全預設引數
形式引數全部被初始化

傳參必須是從左往右傳
半預設半數
形式引數部分被初始化
半預設必須是連續的從右往左預設
傳參必須是從左往右傳
#include<iostream>
using namespace std;
void f(int a ,int b = 2, int c = 3 )
{
cout << a * a << " " << b * b << " " << c * c << endl;
}
int main()
{
f(2);
f(2, 4);
f(2, 4, 6);
return 0;
}
函式多載
C語言中不允許函式名相同,但是C++可以
同一個函式名被多次使用就是函式多載
特點就是函式名相同,引數(型別 or 個數 or 順序)不同
eg:
型別不同
int Add(int a, int b)
{
return a + b;
}
double Add(double a, double b)
{
return a + b;
}
long Add(long a, long b)
{
return a + b;
}
個數不同
int Add(int a, int b)
{
return a + b;
}
int Add(int a)
{
return a;
}
順序不同
void Func1(int i, char ch)
{}
void Func1(char ch, int i)
{}
回傳值如何與是否構成多載無關
呼叫時,多載函式會根據實際引數自動識別
參考(1)
什么是參考
給同一個變數取新的名字
這些名稱都指向的同一塊空間
對任意一個名稱操作都可以操作這塊共用的空間

參考的特性
- 參考變數必須在定義的時候進行初始化
- 一個變數可以多次參考
- 一個參考如果參考了一個變數就跟定這個變數了,不能再被用來參考其他變數
常參考
參考取別名時,變數訪問的權限可以縮小不能放大
#include<iostream>
using namespace std;
int main()
{
int a = 1;
int& ra = a;
const int& e = ra;
cout << e << endl;
return 0;
}
ra的權限是可讀可寫的,e的權限是只讀的,由于權限是縮小了沒有放大,所以這樣是可以的
#include<iostream>
using namespace std;
int main()
{
int i = 1;
double db = i;
const double& rd = db;
const float& rs = rd;
return 0;
}
double db = i;
這句是隱式型別轉換,double是臨時變數,臨時變數具有常性,也就是只讀不可寫
所以用const double參考并沒有放大權限
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/274094.html
標籤:其他
