CPP語言開發基礎知識

目錄

1、面向對象... 1

2、命名空間 - 避免類名衝突... 1

3、類的繼承 – 可以直接訪問父類定義的方法... 1

4、構造方法和析構方法... 1

5、執行父類的構造方法... 1

6、執行父類的方法... 2

7、實函數、虛函數、純虛函數、函數重寫... 2

8、純虛類... 2

9、函數重載 – 函數名稱一樣,參數不同... 2

10、運算符重載... 3

11、僞函數 – 實際上是一個類或者結構體... 3

12、函數指針... 4

13、引用... 6

14、友元類... 6

15、標準庫容器的基本用法... 6

16、字符串常用操作... 7

17、文件操作... 8

 

 

 

1、面向對象

頭文件和靜態庫,不提供代碼分享給其他人

 

頭文件 – 申明

類中 - 實現

 

new/delete

malloc/free

2、命名空間 - 避免類名衝突

創建:

Namespace yx {

}

 

使用:

  yx::類名

  using namespace yx;

3、類的繼承 – 可以直接訪問父類定義的方法

this指針

4、構造方法和析構方法

構造方法 – 初始化操作 – new創建指針對象

 

析構方法 – 刪除當前類的對象 - 值對象在代碼塊執行完畢後刪除或者指針對象delete

 

創建值對象時會先調用構造方法再調用析構方法

5、執行父類的構造方法

Man::Man(int age):yx::People::People(age, 1) { }

6、執行父類的方法

在子類方法中寫一個方法,調用父類的方法

void Man::sayHello() {

    yx::People::sayHello(); 
}

直接在main函數中使用時,可以直接指定使用子類方法或者父類方法

Man *m = new Man(21);

m -> People::sayHello();

7、實函數、虛函數、純虛函數、函數重寫

虛函數 – 函數重寫 – 動態綁定 – 將基類函數使用virtual聲明

 

純虛函數 – 基類中方法定義而不實現,由子類實現 – “virtual” “=0”

  virtual void eat() = 0;

8、純虛類

抽象類 – 在類中包含純虛函數,那麼這個類就叫做抽象類

 

純虛類 – 類中的所有成員方法都是虛函數 – 相當於Java中的接口

9、函數重載 – 函數名稱一樣,參數不同

C++中的字符串是string類型

C中的字符串是char*類型

轉換:

string name = "yx";

(char *)name.c_str()

 

string str = "Hello ";
str
+= name; //字符串連接

10、運算符重載

void operator+=(Point p) {
    add(p);
}

 

Point p = Point(10, 10);//值對象
p
+= Point(13, 13);

 

 

Point *p = new Point(6,6); //指針對象
(*p)
+= Point(2,2); //都是通過值進行重載

11、僞函數 – 實際上是一個類或者結構體

重載“()”,將僞函數作爲變量來傳遞,通過這種方式將類當做一個函數來對待,方便

void hello(){
    printf(
"Hello\n");
}


class Hello{

public:
   
void operator()(){
        printf(
"Hello Cpp\n");
    }
};


int main() {

    hello();
   
   
Hello h;
    h
();
   
return 0;
}

 

12、函數指針

函數指針是指向函數的指針變量,即本質是一個指針變量

指向函數的指針包含了函數的地址,可以通過它來調用函數。聲明格式如下:

類型說明符 (*函數名)(參數)
   
例如:void (*fptr)();

 

指針函數是指帶指針的函數,即本質是一個函數。函數返回類型是某一類型的指針

類型標識符 *函數名(參數表)

例如:int *f(x,y); 

首先它是一個函數,只不過這個函數的返回值是一個地址值。指針函數一定有函數返回值,而且在主調函數中,函數返回值必須賦給同類型的指針變量

 

#include <iostream>
#include <stdio.h>

using namespace std;

class Object;
typedef void(Object::*SayHi)();


class Object {
public:
//    void (Object::*sayhi)();
SayHi sayhi;
};


class Hello:public Object{
public:
    Hello(){

//        sayhi = (void (Object::*)())(&Hello::helloSayHi);
       
sayhi = (SayHi)(&Hello::helloSayHi);
        (
this->*sayhi)();
    }
   
void helloSayHi(){
        printf(
"Hello CPP\n");
    }
};


int main() {
   
Hello *h = new Hello();
   
delete h;
   
return 0;
}

 

應用:延時執行某個方法的代碼

#include <iostream>

#include <thread>

#include <unistd.h>

 

class Object;

 

typedef void(Object::*SayHi)();

typedef void(Object::*CallaterHandler)();

void threadFunc(Object *target,CallaterHandler handler,int delay){

    sleep(delay);

    (target->*handler)();

}

 

void callater(Object *target,CallaterHandler handler,int delay){

    std::thread t(threadFunc,target,handler,delay);

    t.join();

}

 

#define CH(fp) (CallaterHandler)(&fp)

 

 

class Object {

   

public:

    SayHi sayHi;

};

 

class Hello:public Object {

   

public:

    Hello(){

//        sayHi = (SayHi)(&Hello::HelloSayHi);

//       

//        (this->*sayHi)();

       

        callater(this, CH(Hello::HelloSayHi), 3);

    }

   

    void HelloSayHi(){

        printf("Hello CPP\n");

    }

};

 

int main(int argc, const char * argv[])

{

   

    Hello *h = new Hello();

    delete h;

 

    // insert code here...

    std::cout << "Hello, World!\n";

    return 0;

}

13、引用

值傳遞 – 執行內存拷貝 – 消耗時間

引用傳遞 – 不執行內存拷貝 – 程序運行高效

 

也可以使用指針

14、友元類

將類聲明爲友元,來訪問另一個類的私有成員

 

friend class B

15、標準庫容器的基本用法

#include <iostream>
#include <list>
#include <string>
#include <map>

using namespace std;

int main() {
   
list<string> l;
    l.push_back(
"Hello");
    l.push_back(
"World");

   
list<string>::iterator it;
   
for (it = l.begin();it != l.end();it++){
        cout
<<*it<<endl;
    }

   
map<string,string> m;
    m.insert(pair<
string,string>("a","A"));
    m.insert(pair<
string,string>("b","B"));
    cout
<< m.at("a") << endl;

    m
["d"] = "D"; //C++重載了[]運算符
   
cout << m.at("d") << endl;
   
   
return 0;
}

16、字符串常用操作

字符串連接:重載了運算符+=

 

字符串與其他類型連接:

    stringstream ss;
    ss
<<"A ";

 

#include <iostream>
#include <sstream>

using namespace std;

int main() {
   
string str;
    str
+="a ";
    str
+="b";
    cout
<< str <<endl;

   
stringstream ss;
    ss
<<"A ";
    ss
<<200;
    ss
<< "B "<<"C"<<100;

    cout
<<ss.str();//c++語言字符串
   
cout<<ss.str().c_str();//c語言字符串

   
return 0;
}

17、文件操作

#include <iostream>
#include <fstream>
#include <sstream>

using namespace std;

int main() {
//    ofstream of("data.txt");//寫
//    of<<"Hello Cpp\n";
//    of.close();

   
ifstream inf("data.txt");//讀
//    char c;
//    inf >> c;

   
stringbuf sb;
    inf
>> &sb;

//    cout << c;
   
cout << sb.str();

//    cout << "Hello, World!" << endl;
   
return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章