真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網站制作重慶分公司

Qt和C++筆記-創(chuàng)新互聯(lián)

QT調試快捷鍵:

ctrl + r 運行

創(chuàng)新互聯(lián)主要從事網站設計制作、成都做網站、網頁設計、企業(yè)做網站、公司建網站等業(yè)務。立足成都服務甘泉,十多年網站建設經驗,價格優(yōu)惠、服務專業(yè),歡迎來電咨詢建站服務:028-86922220

F5 斷點調試,切換斷點

F10 進入下一行

F11 進入函數(shù)內部

shift + F11 跳出函數(shù)

Qtxml相關:

DOM:提供一個接口來訪問和改變xml文件中的內容,xml就像是一個有層次的樹形視圖,可以方便的對xml進行增刪改查

SAX:基于事件的標準接口,適用于不需要對文檔進行操作,只需要讀取整個xml文檔

g_root = g_doc.documentElement(); 獲取全部的一級目錄

QDomNodeList currencyNodes = element.childNodes(); 獲取全部的二級目錄

QDomNodeList child = apiNodes.at(0).childNodes(); 獲取全部的三級目錄

XML:可擴展性標記語言

傳輸和存儲數(shù)據,不是展示數(shù)據。

xml標簽自定義,寫標簽名的要有含義。

根節(jié)點

標簽自定義

xml標簽區(qū)分大小寫,不可以交叉;

屬性就是表示標簽以外的額外信息,比較雞肋

xml和HTML的區(qū)別:

xml標簽成對出現(xiàn),HTML要求不嚴格

xml用于存儲和傳輸,HTML用于展示

xml標簽自定義,HTML不行

xml頭聲明:

C++筆記進階篇: 虛函數(shù)和純虛函數(shù)

虛函數(shù)是為了實現(xiàn)多態(tài),所謂多態(tài)就是一個接口有多種實現(xiàn)的方法,多態(tài)實現(xiàn)基類必須要有虛函數(shù),子類對虛函數(shù)重寫,當然也可以不重寫,但是純虛函數(shù)必須重寫,實現(xiàn)多態(tài)就是基類的指針指向子類的對象,從而可以實現(xiàn)對子類的調用。

純虛函數(shù)和虛函數(shù)差不多,在基類中不可以實現(xiàn),只能聲明,子類中重寫,實現(xiàn)多態(tài)。

virtual void fun()=0;

虛析構:在父類析構函數(shù)前加virtual關鍵字,當delete父類指針指向的對象時就會釋放子類的析構函數(shù)。

純虛析構和虛析構的區(qū)別:純虛析構必須類內聲明加virtual,類外實現(xiàn),Base::~Base(){};

深淺拷貝

類的深淺拷貝,當類中有指針成員時,當舊對象給新對象初始化就會調用拷貝構造函數(shù),Data ca1(10); Data ca2 = ca1;

調用的拷貝構造函數(shù)形式為:Data(const Data &ob){ma = ob.ma; cout<<"拷貝構造函數(shù)"}

當類中成員含有指針成員時,需要給對象申請獨立的地址空間,Data(const Data &ob){name = new char[strlen(ob.name)+1];strcpy(name,ob.name);cout<<"堆區(qū)的拷貝構造函數(shù)"}

結構體深淺拷貝:淺拷貝:當結構體成員無指針成員時使用,如果含有指針成員,會存在多次釋放的問題

深拷貝:當結構體中含有指針成員時,要申請獨立的地址空間,實現(xiàn)strcpy后,單獨釋放

構造函數(shù)和析構函數(shù)

構造函數(shù)和析構函數(shù):構造函數(shù)是將對象初始化,可以有參無參,不能有返回值。析構函數(shù)將對象清理,有參和無參類型,自動調用

當一個類中含有另一個類名的成員時,會先初始化另一個類的構造函數(shù),再調用自身的構造函數(shù),

先釋放自身的析構函數(shù),再釋放另一個類的析構函數(shù),class Data{ ob(a); }

類中定義的函數(shù),可以在類外使用ALT+ENTER實現(xiàn),或者在類外(類名::函數(shù)名)實現(xiàn)

重載和重寫

重載是在基類中定義相同的方法名,參數(shù)不同。重寫是基類重寫父類的方法,函數(shù)名和參數(shù)相同。

重載是在一個類中,重寫是子類與父類之間

重載是編譯時,重寫發(fā)生在運行時

重載的參數(shù)類型,參數(shù)個數(shù),參數(shù)順序可以不同,重寫子類和父類方法必須相同

重載對返回類型沒有要求,重寫有要求返回類型

單例模式:

當一個類中含有靜態(tài)成員時,靜態(tài)成員是先于所有對象存在的,不需要實例化對象,可以直接通過類名調用,靜態(tài)成員在類中定義,在類外初始化

普通成員和普通成員函數(shù)必須要通過對象調用,一個類中的靜態(tài)成員和成員函數(shù)是被其他所有對象共享的,即一個對象成員發(fā)生修改時,其他對象調用時也會改變

class Data{public:static int a;} int Data::a = 100; Data A1; A1.a/Data::a;

只允許該類實例化一個對象,如何實現(xiàn):將構造函數(shù)和析構函數(shù)私有化,所以只能在類的內部私有實例化,使用static 類名 * const p;//p保存實例化地址 初始化:類名 *const::p = new 類名(創(chuàng)建唯一的實例)

定義一個公有的靜態(tài)成員函數(shù),獲取實例化地址,static 類名 *getAdress(){}

主函數(shù)中使用 類名 *p1 = 類名::靜態(tài)成員函數(shù);

this指針:當類中的成員變量和成員函數(shù)形參重名時,使用this->ma=ma; 非靜態(tài)成員都默認含有this指針

C++高階部分 繼承

子類繼承父類的成員和方法,不能繼承構造和析構,重載,賦值運算符

public保持不變,private不可以被繼承,protected只能在子類訪問,不能在類外訪問

格式: class son : public Base

當子類和父類出現(xiàn)同名的成員時,可以使用加作用域區(qū)分 (不加優(yōu)先調用子類)

多繼承格式:class son : public Base1,public Base2

C++多態(tài)(父類指針指向子類空間)

靜態(tài)多態(tài),編譯時發(fā)生(早綁定)【函數(shù)重載,運算符重載,重定義】

動態(tài)多態(tài),運行時發(fā)生(晚綁定)【虛函數(shù)】

如果子類和父類出現(xiàn)相同的方法,父類指針指向子類對象時,調用父類的方法。

Base *ob = new Son; ob.func();

所以就要在父類成員函數(shù)前加virtual 子類可加可不加,實現(xiàn)多態(tài),也就是

動態(tài)綁定機制:當出現(xiàn)virtual關鍵字,就會生成虛函數(shù)指針,虛函數(shù)指針查找對應的虛函數(shù)表,查找函數(shù)的入口地址,如果沒有繼承,會指向父類的函數(shù)入口地址。

如果有繼承,子類繼承父類的虛函數(shù)指針和虛函數(shù)表,查找子類的函數(shù)入口地址,指向子類的成員函數(shù)

重載重寫重定義的區(qū)別:

  • 重載函數(shù)名必須相同,參數(shù)列表,返回值類型可以不同。(發(fā)生在一個類中)

  • 重寫函數(shù)名,返回值類型,參數(shù)列表都要相同,子類重寫父類的虛函數(shù)或純虛函數(shù),多用于多態(tài)中。(發(fā)生在子類和基類中)

  • 重定義就是子類和父類函數(shù)名相同,參數(shù)不同,不管有無virtual,都會屏蔽父類函數(shù);參數(shù)相同時,如果沒有virtual,也會屏蔽父類函數(shù),如果有virtual就是重寫。(發(fā)生在子類和基類中)

純虛函數(shù)實例:

煮咖啡和煮茶葉都有,煮水,加入主料,加入輔料等操作

父類將通用的方法定義為純虛函數(shù),然后使用一個普通函數(shù)調用這些步驟

煮咖啡的子類重寫父類的純虛函數(shù),煮茶葉的子類重寫父類的純虛函數(shù)。

主函數(shù)兩種調用方式1.父類指針指向子類對象2.外部定義一個void test(基類名 * p){p->普通函數(shù);delete p;} test(new tea);test(new coffee);

模板 函數(shù)模板(泛型編程)
  • 將功能相同類型不同的函數(shù)或類抽象成虛擬的類型,編譯器自動將虛擬的類型具體化,提高代碼重用性

  • 函數(shù)模板 要有template關鍵字修飾 關于T的類型會從主函數(shù)的實參中獲取作相應的改變

  • 函數(shù)模板會編譯兩次,一次對函數(shù)模板本身,一次在函數(shù)調用時

//當函數(shù)模板和普通函數(shù)都存在時會優(yōu)先調用普通函數(shù)

//也可以指定調用模板函數(shù) Swap<>(a,b); 也可以直接告訴模板類型 Swap(a,b)

//如果形參的兩種類型不同,可以使用函數(shù)模板強制轉換,Swap(10,'a')

//函數(shù)模板也可以重載

template

void Swap(T &a, T &b)

{

T tmp;

tmp=a;

a=b;

b=tmp;

return ;

}

template

void test(T &a)

{

cout<

}

template

void test(T &a,T &b)

{

cout<

}

//當遇到結構體,自定義類型的時候,識別不到就可以使用函數(shù)模板具體化

template

void test(T &a,T &b)

{

cout<

}

class data

{

int a;

friendly void test(data a,data b);

}

//函數(shù)模板具體化

template void test(data a,data b)

{

}

int main()

{

int a=10,b=20;

Swap(a,b);

char a='B',b='A';

Swap(a,b);

return 0;

}

類模板
  • 使用類模板時將聲明和定義的文件改為.hpp文件

template

class Data

{

private:

T1 a;

T2 b;

public:

Data();

Data(T1 a,T2 b)

{

this->a = a;

this->b = b;

}

void test()

{

cout<<""endl;

}

};

void main()

{

//不能直接使用無參構造,不會自動轉換類型,不知道該轉換什么類型

//所以使用類模板的使用,調用必須指定類型

Dataob1(10,20);

ob1.test();

Dataob2(10,'a');

ob2.test();

}

//在類外實現(xiàn)的類模板也要有template關鍵字

template

class Data

{

private:

T1 a;

T2 b;

public:

Data();

Data(T1 a,T2 b)

{

this->a = a;

this->b = b;

}

void test();

};

template

void Data::test()

{

cout<

}

void main()

{

//不能直接使用無參構造,不會自動轉換類型,不知道該轉換什么類型

//所以使用類模板的使用,調用必須指定類型

Dataob1(10,20);

ob1.test();

Dataob2(10,'a');

ob2.test();

}

數(shù)組模板

template

class Array

{

private:

T *arr;//地址

int size;//數(shù)組大小

int capacity;//數(shù)組容量

public:

Array();//無參

Array(int capacity);//有參

//類中有指針成員所以要深拷貝

Array(const Array &ob);

~Array();//析構函數(shù)

Array& operator =(Array &ob);//重寫 賦值運算符深拷貝

void pushBack(int elm);//插入元素

void sortArray();//排序

};

#endif // ARRAYCLASS_HPP

template

Array::Array()

{

size = 0;

capacity = 5;

arr = new T[capacity];

memset(arr,0,sizeof(T)*capacity);

}

template

Array::Array(int capacity)

{

this->capacity = capacity;

size = 0;

arr = new T[capacity];

memset(arr,0,sizeof(T)*capacity);

}

template

Array::Array(const Array &ob)

{

//拷貝構造函數(shù),就對象給新對象賦值

capacity = ob.capacity;

size=ob.size;

arr = new T[capacity];

memset(arr,0,sizeof(T)*capacity);

//要把就得內容拷貝到新的空間

memcpy(arr,ob.arr,sizeof(T)*capacity);

}

template

Array::~Array()

{

delete []arr;

}

template

Array&Array::operator =(Array &ob)

{

//判斷舊空間是否為空

if(arr !=NULL)

delete []arr;

capacity = ob.capacity;

size=ob.size;

arr = new T[capacity];

memset(arr,0,sizeof(T)*capacity);

memcpy(arr,ob.arr,sizeof(T)*capacity);

return *this;//返回this的對象

}

template

void Array::pushBack(int elm)

{

//是否滿

if(size == capacity)

{

capacity = 2*capacity;

T *tmp = new T[capacity];

//

if(arr != NULL)

{

memcpy(tmp,arr,sizeof(T)*capacity);

delete []arr;

}

arr = tmp;

}

arr[size] = elm;

}

你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧


網頁標題:Qt和C++筆記-創(chuàng)新互聯(lián)
新聞來源:http://weahome.cn/article/jhish.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部