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