第二章 基本語言
第五節 結構、權限修飾符、類簡介
1. 結構回顧
- 結構,自定義的數據類型
#include <iostream>
#include <cstring>
using namespace std;
typedef struct student {
int number;
char name[100];
} student;
//形參用結構變量
void func(student tmpstu) {
tmpstu.number = 2000;
strcpy(tmpstu.name, "Who");
}
void func1(student &tmpstu) {
tmpstu.number = 2000;
strcpy(tmpstu.name, "Who");
}
//用指向結構體的指針作爲函數傳遞
void func2(student *tmpstu) {
tmpstu->number = 3000;
strcpy(tmpstu->name, "WhoWho");
}
int main() {
student stu1;
strcpy(stu1.name, "Felaim");
stu1.number = 1001;
cout << stu1.name << endl;
cout << stu1.number << endl;
// 值並沒有發生變化
// 效率很低,整個結構體都被進行拷貝
func(stu1);
cout << stu1.name << endl;
cout << stu1.number << endl;
func1(stu1);
cout << stu1.name << endl;
cout << stu1.number << endl;
student *pstu;
func2(pstu);
cout << pstu->name << endl;
cout << pstu->number << endl;
return 0;
}
c++和c語言中的結構有什麼區別?
- c++中結構具備了c語言結構的所有功能外,還增加了很多擴展功能,最突出的擴展功能是:
不僅僅有成員變量,還可以定義成員函數(方法)
#include <iostream>
#include <cstring>
using namespace std;
typedef struct student {
int number;
char name[100];
//成員函數也叫方法
void func(){
number++;
}
} student;
//形參用結構變量
void func(student tmpstu) {
tmpstu.number = 2000;
strcpy(tmpstu.name, "Who");
}
int main() {
student stu1;
strcpy(stu1.name, "Felaim");
stu1.number = 1001;
cout << stu1.name << endl;
cout << stu1.number << endl;
// 值並沒有發生變化
// 效率很低,整個結構體都被進行拷貝
func(stu1);
cout << stu1.name << endl;
cout << stu1.number << endl;
stu1.func();
cout << stu1.number << endl;
return 0;
}
2. public和private權限修飾符
-
public(公有), private(私有), protect(保護),本節介紹前兩種
-
public:公共的意思,用這個修飾符修飾結構/類中的成員變量或成員函數,就可以被外界訪問,一般我們需要被外界訪問的東西,就定義爲public
-
private: 私有的意思,用這個修飾符修飾結構/類中的成員變量或成員函數,只有內部定義的成員函數才能使用
#include <iostream>
#include <cstring>
using namespace std;
typedef struct student {
public://結構成員缺省都有public屬性
private:
int number;
char name[100];
public:
//成員函數可以調用私有成員變量number
void func() {
number = 100;
cout << number << endl;
}
} student;
int main() {
student stu1;
// 如果定義成private之後,就無法調用
strcpy(stu1.name, "Felaim");
stu1.number = 1001;
cout << stu1.name << endl;
cout << stu1.number << endl;
return 0;
}
3. 類簡介
-
類也是用戶自定義的數據類型
-
不管是c還是c++,結構都使用struct定義
結構和類到底有什麼區別?
-
類只有在c++中才有的概念
-
結構使用struct來定義,類用class中定義,在c中定義一個屬於該結構的變量,我們稱爲結構變量
在c++中,我們定義一個屬於該類的變量,我們稱爲對象 -
說白了結構變量也好,對象也好,它們都是一塊能夠存儲數據並且具有某種類型的內存空間
-
c++中結構和類極其相似,區別有兩點:
-
c++結構內部的成員變量以及成員函數默認的訪問級別都是public屬性,
c++類內部的成員變量以及成員函數默認的訪問級別是private -
c++結構體繼承默認的是public,c++類的繼承默認的都是private
- 額外說明:
- 標準c++庫中包含大量豐富的類和函數, string, vector
4. 類的組織
- 書寫規範:類的定義代碼放在頭文件中, 頭文件可以和類名相同,類的具體實現代碼放在.cpp文件中,實現的文件名也可以是類名,.cpp文件中需要包含類名的.h文件