(一)C++名稱空間及引用
摘要:
C++名稱空間及引用
一、C 與 C++ 的關係
C++ 可以與 C 程式碼進行混編
C++ 是一個面向物件程式語言、C 語言是面向過程的程式語言
C++ 是對 C 的一個增強
二、C++ 名稱空間
...
C++名稱空間及引用
一、C 與 C++ 的關係
- C++ 可以與 C 程式碼進行混編
- C++ 是一個面向物件程式語言、C 語言是面向過程的程式語言
- C++ 是對 C 的一個增強
二、C++ 名稱空間
- C++ 標準的名稱空間為 std ,包含很多標準的定義
- << 為運算子過載
- 名稱空間類似於Java中的包
- 名稱空間可以先進行使用
- :: 為訪問修飾符
示例:
#include <stdlib.h> #include <iostream> //使用標準名稱空間 using namespace std; //自定義名稱空間 namespace NSP_A{ int a = 9; struct Teacher{ char name[20]; int age; }; struct Student{ char name[20]; int age; }; } void main(){ //std::cout << "this is c plus plus" << std::endl; cout << "this is c plus plus" << endl; cout << "訪問自定義名稱空間的屬性a:" << NSP_A::a << endl; //使用名稱空間中的結構體 using NSP_A::Student; Student t; t.age = 19; cout << "學生的年齡為:" << t.age << endl; getchar(); }
三、C++ 中的類
C++ 中的類中的屬性共享許可權訪問修飾符
類的 } 後有分號;
using namespace std; #define PI 3.14 class MyCircle{ //屬性 private: double r; double s; public: double length; public: void setR(double r){ this->r = r; } double getS(){ return PI * r * r; } }; void main(){ MyCircle c1; c1.setR(4); cout << "圓的面積:" << c1.getS() << endl; getchar(); }
輸出:
圓的面積:50.24
四、C++ 中的結構體
-
C++ 中的結構體中有許可權訪問修飾符
-
結構體在C++ 中使用時可以省略 struct
-
結構體不能被繼承
using namespace std; struct Teacher{ //屬性 public: char* name; int age; public: void say(){ cout << "My name is " << this->name << ", I am " << this->age << " years old." << endl; } }; void main(){ Teacher t1; strcpy(t1.name, "Jack"); t1.age = 25; t1.say(); getchar(); }
五、C++ 中的資料型別
- C++中有 bool 型別 ,大小為1位元組
- C++中的三目運算可以成為左值,改變複合條件的屬性的值
using namespace std; void main(){ //bool isSingle = true; bool isSingle = -1; if(isSingle){ cout << "單身" << endl; }else{ cout << "有物件" << endl; } int a = 10, b = 20; int c = (a > b) ? a : b; cout << "最大的數為" << ((a > b) ? a : b) << endl; //三目運算可以成為左值 (a > b) ? a : b = 30; cout << "b 的值為" << b << endl; getchar(); }
六、C++ 中的引用
1、引用的定義
- C++ 中的引用就是在宣告的變數名稱前加&符號,是為變數取別名,作為函式引數傳遞,能保證引數傳遞過程中不產生副本
- 引用必須要有值,不能為NULL
- 引用可以直接操作變數,指標要通過取值( p),間接操作變數,指標的可讀性差 *
using namespace std; void main(){ int a = 10; //b就是a的記憶體空間的另一個別名 int &b = a; cout << b << endl; getchar(); }
2、C++ 中的引用的作用
- 在 C++ 程式碼中使用引用比使用指標寫起來更加方便
using namespace std; //通過指標進行值交換 void swap_1(int *a, int *b){ int c = 0; c = *a; *a = *b; *b = c; } //通過引用進行值交換 void swap_2(int &a, int &b){ int c = 0; c = a; a = b; b = c; } void main(){ int x = 30; int y = 50; swap_1(&x, &y); cout << "指標交換:x的值為:"<< x << ",y的值為" << y << endl; swap_2(x,y); cout << "引用交換:x的值為:"<< x << ",y的值為" << y << endl; getchar(); }
3、C++中引用的主要功能
- 在 C++ 中,引用的主要功能是作為函式的引數或返回值
using namespace std; struct Teacher{ const char* name; int age }; void myprint(Teacher &t){ cout << "姓名:" << t.name << ",年齡:" << t.age << endl; } void main(){ Teacher t; t.name = "jsaon"; t.age = 29; myprint(t); getchar(); }
- 在 C++ 中,對指標的引用可以代替二級指標
using namespace std; struct Teacher{ const char* name; int age }; void getTeacher(Teacher **p){ Teacher *tmp = (Teacher*)malloc(sizeof(Teacher)); tmp->age = 20; *p = tmp; } //指標的引用,代替二級指標 void getTeacher(Teacher* &p){ p = (Teacher*)malloc(sizeof(Teacher)); p->age = 20; } void main(){ Teacher *t = NULL; getTeacher(&t); getchar(); }
4、指標常量和常量指標
- 指標常量就是指標的常量,不改變地址的指標,但是可以修改它指向的內容
void main(){ int a = 2, b = 3; int *const p1 = &a; //p1 = &b; //失敗的,不能改變地址 *p1 = 4; //可以改變a的值 getchar(); }
- 常量指標就是指向常量的指標,不能修改內容,可以修改地址
void main(){ int a = 2, b = 3; const int *p2 = &a; p1 = &b; //可以改變地址 //*p2 = 9; //不可以改變a的值 getchar(); }
5、常引用
常引用類似於Java中的final,值不可修改
void main(){ int a = 10,b = 9; const int &c = a; //c = b; //不能再次賦值 const int &d = 66; }
七、C++ 中的函式
1、函式引數的預設值
- 在C++中,可以對函式的引數設定預設值
- 有預設值的引數必須在無預設值引數的最後
using namespace std; int add(int x, int y = 13, int z = 20) { return (x + y + z); } void main() { int x = 17; int sum = add(10); cout << "x+y+z=" << sum << endl; getchar(); }
2、函式的可變引數
- 在C++中,針對函式引數不確定的情況下,可使用可變引數
#include <stdarg.h> using namespace std; void func(int i,...){ //可變引數指標 va_list args_p; //開始讀取可變引數,i是最後一個固定引數 va_start(args_p,i); int a = va_arg(args_p,int); int b = va_arg(args_p,int); char c = va_arg(args_p,char); cout << a << endl; cout << b << endl; cout << c << endl; //結束 va_end(args_p); } void main() { func(9,10,32,'C'); getchar(); }
3、函式的可變引數(迴圈讀取)
- 在C++中,針對函式引數不確定的情況下,可使用可變引數
- 可變引數在迴圈遍歷時,不能獲取個數,只能通過約定來確定可變引數個數;如第一個值來表示可變引數個數
#include <stdarg.h> using namespace std; void func(int count, ...) { //可變引數指標 va_list args_p; //開始讀取可變引數,i是最後一個固定引數 va_start(args_p, count); char value; int i = 0; for (;i < count; i++) { value = va_arg(args_p, char); cout << value << endl; } //結束 va_end(args_p); } void main() { func(3, 'a', 'b', 'C'); getchar(); }