成員變數
成員變數權限
類別成員變數權限預設是private,結構成員變數權限預設是public。
public與private與其它權限,可以在類別中出現很多次,以下public就出現2次,private出現2次。
1
2
3
4
5
6
7
8
9
10
class Student {
public:
char name[50];
private:
char address[100];
public:
int age;
private:
char father[50];
};
成員變數命名
命名方式使用成員變數_,成員變數名 + 加上底線_。
1
2
3
4
5
6
7
8
9
10
class Student {
public:
const char* name_;
int id_;
};
int main() {
Student s;
s.name_ = "Bill";
return 0;
}
成員變數未初始化
在變數預設值與函式區域變數初始值文章中提過,區域變數不會有預設值,所以印出區域變數都是垃圾資料。
1
2
3
4
5
int main() {
int n;
cout << n << endl;
return 0;
}
15824
相同的,物件的成員變數也不會有初始值,所以印出來都是垃圾資料。
1
2
3
4
5
6
7
8
9
10
11
class Student {
public:
const char* name_;
int id_;
};
int main() {
Student s;
cout << s.name_ << endl;
cout << s.id_ << endl;
return 0;
}
H\211\330H\203\304[]\303UH\211\345H\205\366tTE1\311A\2700
-1074793600
成員變數初始化
指標變數,可以設nullptr;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Student {
public:
// 成員變數初始化
const char* name_ = nullptr;
int id_ = 0;
Student() {}
};
int main() {
Student s;
if (s.name_ == nullptr) {
cout << "name_ is nullptr" << endl;
} else {
cout << "name_: " << s.name_ << endl;
}
cout << s.id_ << endl;
return 0;
}
name_ is nullptr
0
成員函式在類別外定
print()成員函式程式碼在類別之外定義,定義方式如下。
傳回值 類別名::函式名(){程式碼}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Student {
public:
char name_[50];
//宣告函式
void print();
};
//類別外部定義
void Student::print() {
cout << "test" << endl;
}
int main() {
Student student;
student.print();
return 0;
}
test
成員變數是類別
在Java的世界中,只有new的那一刻才會呼叫類別的建構子。
但在C++的世界中,執行到Family m_family;就會呼叫類別的建構子,並且在記憶體建立此物件的位址。
1
2
3
4
class Student {
public:
Family m_family;
};
完整程式碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
class Family {
public:
string mon;
string dad;
Family(){
cout << "Family 建構子" << endl;
}
};
class Student {
public:
Family m_family;
};
int main() {
Student student;
return 0;
}
Family 建構子
由執行結果可以知道,建立student物件的時候,就會建立Family物件。