C++基礎筆記01

強類型語言,類型檢查嚴格
支持面向對象,泛型,異常(打游戲可不能異常),運算符重載

C++文件后綴可以是 .cpp,.cc,.c等

//includeC++本身的頭文件時 使用<不加.h>
#include <iostream>
//C 的頭文件  可以加.h  但是C++不推薦
#include <stdio.h>
//推薦 使用C++重寫的頭文件 把.h去掉 在前面加c
#include <cstdio>
//如果要 include 我們自己寫的頭文件時 使用 "" 加.h
#include "MyClass.h"

cout的是一個對象 通過<<輸出運算符 進行輸出 可以連續輸出,endl是換行。
cin/cout代替 scanf,cout
std是命名空間,::是域運算符

std::cout << "Hello, World!\n" << 123213 << 3.4324 << 'a'<< std::endl;
std::cin >> x;
//  相當于std::cin.operator>>(x);對象調方法,可省,略寫如上

命名空間

//使用指令后的所有std命名空間下的東西 訪問時都可以不用在加 std了
using namespace std;
//變量和函數
namespace Hero {
    const char *name = "英雄";
    void show() {
        std::cout << "英雄出現了" << std::endl;
    }
}
//命名空間可以分開寫
namespace Hero {
    int a = 200;
}
//使用聲明
using std::cout;

//C++會把所用東西都放在命名空間下,如果我們自己沒有寫命名空間,默認放在一個沒有名字的命名空間下
    cout << ::name << endl;

結構

//可以放函數
struct Date {
    int year;
    int month;
    int day;
    void show() {
        cout << year << "-" << month << "-" << day << endl;
    }
};

聯合就是在內存中都占同一片地址

union MyUnion {
    int x;
    int y;
    double d;
    char cs[4];
};
//可以有匿名聯合
union {
    int x;
    int y;
};

枚舉:不再只是普通的int

//注意用枚舉提高代碼可讀性
enum HeroState{
    Stand,
    Move,
    Attack,
    Die
};

C++中bool是數據類型,本質也是int,c中是宏定義

運算符可以用其他奇怪的關鍵字替換

注意值傳遞和地址傳遞

C++的參數默認值 必須從右向左給 右邊的參數有了默認值左邊的參數才可以給默認值

內聯函數

//inline 內聯函數 執行效率要比普通的函數高
//內聯函數執行的時候不會在棧中開辟空間,而是直接把內容拷貝到得調用的方法中
//inline只是向編譯器發送請求,希望成為內聯函數,編譯器會做檢查,如果內容少,邏輯簡單就會同意申請,如果拒絕了,這個函數調用還和普通函數一樣,  同常情況下,如果是個遞歸函數,肯定會拒絕
inline void print(int x) {
    int a = 200;
    int b = 300;
    cout << x + a + b << endl;
}

啞元函數

//沖突時多一個參數,沒有參數名,這樣就是啞元
void print(int x, int) {
    cout << x << endl;
}

int &r = x;
引用實際是別名,反正r就是x,都是同一個東西,地址都一樣。其實寫成
int& r=x;更好理解
r是個int類型的引用。
引用是一輩子的,不可以改地址了

  // 聲明引用必須初始化
//如果要引用一個常量 必須使用常引用
    const int &r3 = 500;
//    r3 = 500;

弄清值傳遞x=y、地址傳遞 int* p、引用傳遞&x=y
*是尋址運算符也是指針
&是取地址符也是引用

交換兩數的多種方法swap

//交換:用引用
void swap(int &x, int &y) {
    cout << x << ' ' << y << endl;
    int t = x;
    x = y;
    y = t;
    cout << x << ' ' << y << endl;
}

//交換  兩數交換不使用第三個變量
void swap2(int &x, int &y) {
    x = x + y;
    y = x - y;
    x = x - y;
}

//按位異或交換 不使用第三個變量
void swap3(int &x, int &y) {
    x = x ^ y;
    y = x ^ y;
    x = x ^ y;
}

//永遠不要返回局部變量的引用

int& fc() {
    int x = 100;
    return x; 
}

// static_cast<類型>()
// 轉換時做靜態檢查,即在編譯時進行
// void*到其他指針的轉換

double d = 3.1415926;
// int x = d; //隱式類型轉換
 int x = static_cast<int>(d);
//    reinterprect_cast<類型>()
//    允許強轉任何類型的指針
//    把整數強轉成指針,指針強轉成整數
 double *pd = reinterpret_cast<double*>(pl);
//    const_cast<類型>()
//    去掉cv限制
 volatile const int a = 100;//值已改但編譯器自作聰明,volatile 易揮發的
提醒編譯器還是再去內存中取值了。
 int *pa = const_cast<int *>(&a); //const int *
 *pa = 200;

//獲取成員變量地址用 Struct::
&Date::year;
this指針,隱式地傳入當前對象

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容