1. 程式人生 > 實用技巧 >海賊班 c++ 試聽課程知識點

海賊班 c++ 試聽課程知識點

第一天 基礎

1.cout 是物件 用運算子<<將資料傳遞給此物件 當然是通過建構函式

2.cout 針對自定義型別的輸出,需要用到 運算子過載。

class Point{

public:

  Point(int x,int y);

  friend ostream &operator<<(ostream &out,const Point &p);//友元用來訪問私有成員  

private:

  int x,y;

}

Point::Point(int x,int y):x(x),y(y){}    //類建構函式宣告和定義需要拆分開

ostream &operator<<(ostream &out,const Point &p)          //  ostream &左值引用     此處為過載運算子的函式

{

  out<<""<<p.x<<","<<p.y<<")";

  return out;

}

int main(){

  Point a(3,4);

  cout<<"hello world"<<endl;

  cout<<a<<endl;//如果不過載<<運算子   則編譯器會報錯

  return 0;

}

儘量不要用using namspace std; 而是需要明確指定需要引入的物件

例如需要使用 using std::cout;

      using std::endl;

3.技術想象力

程式設計程式設計正規化:

面向過程 面向物件 泛型程式設計 函數語言程式設計

int  add1(int a,int b)     //面向過程

{

  return a+b;

}

class ADD{    //面向物件

  public:

    int operator()(int a,int b){return a+b;}

};

template<tempename T,typename U>    //泛型程式設計

auto add3(T a,U b)->decltype(a+b)

{    return a+b;  }    //返回值後置


auto add4=[](int a,int b)->int{       //函數語言程式設計    λ表示式  

  return a+b;

}


int main(){

  ADD add2;

  cout<<add1(3,4)<<endl;    // 看起來都是面向過程  但是每行均不同

  cout<<add2(3,4)<<endl;

  cout<<add3(3,4)<<endl;

  cout<<add4(3,4)<<endl;

   return 0;

}

c++語法特別多的直接原因就是為了同時支援四種不同的程式設計正規化。

c++與底層系統的聯絡 c++與網路的聯絡

先學程式設計的思維方式和其餘的相關基礎知識 再學c++

4.程式設計學習方法

linux 直接用編譯器 命令 而不用ide

瞭解程式執行的各個步驟 更加詳細。

原始碼-------》物件檔案(編譯後)------》可執行程式(連結後)

物件檔案 obj 放著定義 目標檔案

1.c 生成1.o 目標檔案

2.c 生成2.o目標檔案

3.c 生成3.o目標檔案

這三個目標檔案通過連結的過程 生成a.out 可執行程式檔案。

 #include <vector>

using namespace std;

int add(int ,int);

int main(){

  printf("hello world\n");

  printf("add(3,4)=%d\n",add(3,4));

  return 0;

}

int add(int a,int b)

{

  return a+b;

}

編譯過程基礎知識:

g++ main.cpp   直接編譯

g++ -c main.cpp  生成目標檔案 main.o 這裡包含著函式定義

nm -C main.o    檢視物件檔案

  內容顯示如下

    00000000000050   T add(int,int)      //定義

    00000000000000   T _main        //定義

               U _printf        //到外部查詢定義

編譯階段主要在做語法檢查: 例如上例,如果有宣告,但是沒有定義 則編譯也會通過。 注意這裡的編譯指的是加-c 引數。