柚子快報(bào)激活碼778899分享:開發(fā)語言 C++和QT
柚子快報(bào)激活碼778899分享:開發(fā)語言 C++和QT
引用
概念
引用是個(gè)別名
格式
數(shù)據(jù)類型 &引用名 = 同類型的變量名 (&引用符號)
數(shù)據(jù)類型 &引用名 = 同類型的變量名 (&引用符號)
int a = 10;
int &b = a; //給a取個(gè)別名叫b, b引用a
數(shù)組引用
int a;
a=10;
int &b = a;
cout << a << " " << b << endl;
b=20;
cout << a << " " << b << endl;
int arr[5] = {10,20,30,40,50};
int (*p)[5] = &arr;
int (&str)[5] = arr;
cout << arr[3] << " " << str[3] << endl;
cout << (*p)[3] << endl;
cout << &arr << endl;
函數(shù)引用
int max(int a,int b)
{
return a>b?a:b;
}
int main()
{
int (*p)(int,int) = max;
int (&fun)(int,int) = max;
cout << p(13,32) << endl;
cout << fun(12,53) << endl;
return 0;
}
當(dāng)結(jié)構(gòu)體中有引用成員時(shí)
當(dāng)結(jié)構(gòu)體中有引用成員,使用該結(jié)構(gòu)體類型,定義結(jié)構(gòu)體變量時(shí),就必須定義的同時(shí)初始化,就不可以先定義,后賦值。
struct student
{
string name;
int age;
double &score;
};
int main()
{
double a;
cout << "請輸入" << endl;
cin >> a;
struct student stu = {"zhang",10,a};
stu.name = "zhang";
cout << stu.name << " " << stu.age << " " << stu.score << endl;
return 0;
}
值傳遞,地址傳遞,引用傳遞
值傳遞:一定不改變原值
地址傳遞:可能改變原值
引用傳遞:可能改變原值
space std;
void fun(int a, int b)// int a = a
{
a++;
b++;
}
void fun2(int *a, int *b) //int *a = &a
{
*a++;
*b++;
}
void fun3(int &a, int &b)//int &a = a, int &b = b
{
int c = a;
b++;
}
int main()
{
int a = 10, b = 20;
fun(a,b); //傳值,一定不會改變目標(biāo)的值
cout << "main: a = " << a << " b = " << b << endl;
fun2(&a, &b); //傳址,可能會改變目標(biāo)的值,具體看代碼設(shè)計(jì)
cout << "main: a = " << a << " b = " << b << endl;
fun3(a,b);//傳引用,可能會改變目標(biāo)的值,具體看代碼設(shè)計(jì)
cout << "main: a = " << a << " b = " << b << endl;
return 0;
}
當(dāng)引用作為函數(shù)的返回值的時(shí)候
要求返回的變量生命周期足夠的長(static修飾或者malloc申請空間)
指針和引用的區(qū)別
指針和引用都可以修改變量的值,但本質(zhì)不同:指針是通過地址改變目標(biāo)的值,而引用就是目標(biāo)本身
指針:
存儲地址的變量可以先定義,后指向可以改變指向定義指針需要重新申請空間有指針數(shù)組有多級指針
引用:
引用是個(gè)別名必須定義的同時(shí)初始化指針可以改變指向,而引用一旦指定目標(biāo),就不能被改變定義引用不用重新申請空間沒有引用數(shù)組(引用不是數(shù)據(jù)類型)沒有二級引用
const
const修飾的為只讀變量,也成為常變量
const修飾的局部變量在棧區(qū),const修飾的全局變量在靜態(tài)區(qū)的.ro段
const修飾的變量必須在定義的同時(shí)初始化
如果想要引用常變量,需要常引用(const int &b = a)
函數(shù)重載
概念
在同一個(gè)作用域下,兩個(gè)以上的函數(shù),取相同的函數(shù)名,其函數(shù)的形參類型或者形參個(gè)數(shù)不同,編譯器會根據(jù)實(shí)參的參數(shù)類型或者個(gè)數(shù)自動調(diào)用匹配的函數(shù),這就是函數(shù)重載。
注:返回值類型不同不算重載
例如以下三個(gè)函數(shù)為重載
int task(int x)
{
}
int task(char x)
{
}
int task(int x,int b)
{
}
使用函數(shù)重載實(shí)現(xiàn)不同數(shù)據(jù)類型之和
#include
using namespace std;
int add(int x, int y)
{
return x+y;
}
double add(double x, double y)
{
return x+y;
}
int add(char x, char y)
{
return x+y;
}
string add(string x, string y)
{
return x+y;
}
int main()
{
cout << add(1,2) << endl;
cout << add(1.24, 4.56) << endl;
cout << add('a', '1') << endl;
cout << add("hello", "world") << endl;
return 0;
}
帶有默認(rèn)參數(shù)的函數(shù)定義和使用
#include
using namespace std;
void fun(string name = "kity")
{
cout << name << endl;
}
int main()
{
fun();
fun("hello");
return 0;
}
啞元(了解)
函數(shù)在定義形參時(shí),只定義形參類型,不定義形參名,在函數(shù)中也不使用。
作用:沒有作用,占位。
內(nèi)聯(lián)函數(shù)
在函數(shù)前面加上inline關(guān)鍵字,那么該函數(shù)就是內(nèi)聯(lián)函數(shù)
要求:
函數(shù)的體積要小(代碼一般不超過5行)函數(shù)不能有復(fù)雜語句(循環(huán),遞歸)
作用:提高代碼的運(yùn)行效率
原因:內(nèi)聯(lián)函數(shù)在編譯時(shí)展開
內(nèi)斂函數(shù)和帶參宏的區(qū)別
內(nèi)聯(lián)函數(shù):
編譯時(shí)展開內(nèi)聯(lián)函數(shù)時(shí)函數(shù)調(diào)用
帶參宏:
預(yù)處理時(shí)打開帶參宏是替換
C++中的結(jié)構(gòu)體
C++中結(jié)構(gòu)體和C語言中結(jié)構(gòu)體的區(qū)別
C語言中的結(jié)構(gòu)體在C++中依然適用
C++:
可以在定義結(jié)構(gòu)體的時(shí)候賦初始值結(jié)構(gòu)體中可以有函數(shù)在使用結(jié)構(gòu)體類型定義變量時(shí)可以省略關(guān)鍵字struct結(jié)構(gòu)體的成員有訪問權(quán)限結(jié)構(gòu)體有繼承結(jié)構(gòu)體有特殊的成員函數(shù)
C語言:
定義結(jié)構(gòu)體時(shí)不能賦初始值結(jié)構(gòu)體中不能有函數(shù)在使用結(jié)構(gòu)體類型定義變量時(shí)不可以省略關(guān)鍵字struct結(jié)構(gòu)體成員沒有訪問權(quán)限結(jié)構(gòu)體不能繼承及溝通中沒有特殊的成員函數(shù)
*C++中結(jié)構(gòu)體名一般首字母大寫
類
概念
C++中的類由C++中的結(jié)構(gòu)體演變而來,只是默認(rèn)的訪問權(quán)限和默認(rèn)的繼承方式,以及關(guān)鍵字不同,其他都相同。
一般構(gòu)造數(shù)據(jù)類型中既有變量又有函數(shù)的類型,由類來完成。
C++中結(jié)構(gòu)體和類的區(qū)別
默認(rèn)訪問權(quán)限:
C++中結(jié)構(gòu)體的默認(rèn)訪問權(quán)限是:public共有的
C++中類的默認(rèn)訪問權(quán)限是:private共有的
默認(rèn)繼承方式:
C++中結(jié)構(gòu)體的默認(rèn)繼承方式是:public共有的
C++中類的默認(rèn)繼承方式是:private共有的
關(guān)鍵字:
C++結(jié)構(gòu)體:struct
C++類:class
訪問權(quán)限:public共有的,private共有的,protected保護(hù)的
格式
class 類名
{
public:
公共的數(shù)據(jù)成員、成員函數(shù)
protected:
受保護(hù)的數(shù)據(jù)成員,成員函數(shù)
private:
私有的數(shù)據(jù)成員,成員函數(shù)
};
訪問權(quán)限的介紹
public:共有權(quán)限,表示該權(quán)限下的成員,表示該權(quán)限的屬性(變量),方法(函數(shù))在類內(nèi),子類,類外都能訪問。
protected:該權(quán)限是受保護(hù)權(quán)限,表示該權(quán)限下的屬性(變量)、方法(函數(shù)),在類內(nèi)、子類可以被訪問,而類外不能被訪問。
private:該權(quán)限是私有權(quán)限,該權(quán)限下的屬性(變量)、方法(函數(shù)),只能在類內(nèi)被訪問,子類、類外不可以被訪問。
封裝
類的三大屬性:封裝、繼承、多態(tài)
封裝:寫一個(gè)類的過程,就是將數(shù)據(jù)和對數(shù)據(jù)的處理捆綁在一起的過程。
屬性 + 方法
變量 + 函數(shù)
相關(guān)名稱: 類內(nèi)都可以成為成員,而成員可以具體分為 數(shù)據(jù)成員、成員函數(shù)。
#include
using namespace std;
//封裝一個(gè) 學(xué)生 類
class Stu
{
int a; //默認(rèn)私有訪問權(quán)限
private:
string name;
protected:
int age;
public:
double score;
public:
dan
當(dāng)成員函數(shù)的形參名和數(shù)據(jù)成員同名時(shí)
表明該數(shù)據(jù)成員屬于哪個(gè)類,即加上類名和作用域限定符。
類里的每個(gè)非靜態(tài)成員函數(shù),都隱藏了一個(gè)this指針形參。
this指針
類里的每個(gè)非靜態(tài)成員函數(shù),都隱藏了一個(gè)this指針形參。
誰使用我,我就指向誰。
this指針的原型:
eg : Stu * const this; //指向不可變,指向里的值可變
類外定義成員函數(shù)
在類內(nèi)聲明函數(shù)
在類外定義成員函數(shù),需要表明該函數(shù)屬于哪個(gè)類的,即加上類名和作用域限定符
#include
using namespace std;
//封裝一個(gè) 學(xué)生 類
class Stu
{
int a; //默認(rèn)私有訪問權(quán)限
private:
string name;
protected:
int age;
public:
double score;
public:;
void init(string n, int a, double s);
void show();
};
//在類外定義成員函數(shù)
void Stu::init(string name, int age, double score) // Stu * const this
{
this->name = name;
this->age = age;
this->score = score;
//this = nullptr; // NULL this指針使用過程中 指向不可變
}
void Stu::show()
{
cout << this << endl;
cout << name << endl; //類內(nèi)可以訪問私有成員
cout << age << endl; //類內(nèi)可以訪問受保護(hù)成員
cout << score << endl; //類內(nèi)可以訪問共有成員
}
int main()
{
//使用學(xué)生這樣的類 實(shí)例化一個(gè)學(xué)生對象
Stu s1;
//s1.name = "張三"; //類外不可以訪問私有成員
//s1.age = 20; //類外不可以訪問受保護(hù)成員
s1.score = 99; //類外可以訪問公共的成員
s1.init("張三", 32, 78);
s1.show();
return 0;
}
練習(xí)
自己封裝一個(gè)矩形類(Rect),擁有私有屬性:寬度(width)、高度(height),
定義公有成員函數(shù):
初始化函數(shù):void init(int w, int h)
更改寬度的函數(shù):set_w(int w)
更改高度的函數(shù):set_h(int h)
輸出該矩形的周長和面積函數(shù):void show()
#include
using namespace std;
//封裝一個(gè)矩形類
class Rect
{
private:
int width;
int height;
public:;
void init(int w,int h);
void set_w(int w);
void set_h(int h);
void show();
};
//在類外定義成員函數(shù)
void Rect::init(int w,int h)
{
this->width = w;
this->height = h;
}
void Rect::set_w(int w)
{
this->width = w;
}
void Rect::set_h(int h)
{
this->height = h;
}
void Rect::show()
{
cout << "面積:" << width*height << endl;
cout << "周長:" << 2*width+2*height << endl;
}
int main()
{
Rect s1;
s1.init(4,5);
s1.show();
return 0;
}
柚子快報(bào)激活碼778899分享:開發(fā)語言 C++和QT
參考閱讀
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。