C++面向对象

[toc]

类(Class)

类定义

1
2
3
4
5
6
class className {

/* All member variables
and member functions*/

}; // 注意,类定义必须以分号结尾

创建对象

1
2
3
4
5
6
7
8
class className {
...
};

int main() {
int i; //integer object
className c; // className object
}

类访问范围

私有:

1
2
3
4
5
6
7
8
9
10
class Class1 {
int num; // 1. 默认时私有的
...
};

class Class2 {
private: // 也可以显示声明私有
int num;
...
};

public & protected

1
2
3
4
5
6
7
8
9
class myClass {
int num = 1; // 私有变量
protected:
int count = 0; // 保护类型

public: // 共有
void setNum(){
}
};

类方法

类方法技能在类中直接定义,也可以先在类中声明,再在类外定义:

1
2
3
4
5
6
7
8
9
10
11
12
13
class Rectangle {
int length;
int width;

public:
void setLength(int l){ // 类中定义
length = l;
}

int area(){
return length * width; // 定义并且返回值
}
}; // 注意分号

范围操作符::用于在类定义的外部定义类方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Rectangle {
int length;
int width;

public:

// 1. 此处仅声明
void setLength(int l);
int area();
};

// 2. 使用范围操作符来定义方法
void Rectangle::setLength(int l){
length = l;
}

int Rectangle::area(){
return length * width;
}

构造器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
#include <string>
using namespace std;

class Date {
int day;
int month;
int year;

public:
// 默认构造器
Date(){
// 定义默认的值
day = 0;
month = 0;
year = 0;
}

// 函数
void printDate(){
cout << "Date: " << day << "/" << month << "/" << year << endl;
}
};

int main(){
// 创建类对象
Date d; // 使用默认构造器创建对象
d.printDate();
}

this指针,this表示当前对象的指针。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
#include <string>
using namespace std;

class Date {
int day;
int month;
int year;

public:
// 默认构造函数
Date(){
// We must define the default values for day, month, and year
day = 0;
month = 0;
year = 0;
}

// 参数构造函数
Date(int day, int month, int year){
// 使用指针
this->day = day;
this->month = month;
this->year = year;
}

// A simple print function
void printDate(){
cout << "Date: " << day << "/" << month << "/" << year << endl;
}
};

int main(){
// 调用参数构造函数

Date d(1, 8, 2018); // 使用指定的参数值创建对象
d.printDate();
}