**一、"类" 的介绍**
在C++中, 用 "**类**" 来描述 "**对象**", 所谓的"对象"是指现实世界中的一切事物。那么类就可以看做是对相似事物的抽象, 找到这些不同事物间的共同点, 如自行车和摩托车, 首先他们都属于"对象", 并且具有一定得相同点, 和一些不同点, 相同点如他们都有质量、都有两个轮子, 都是属于交通工具等。"都有质量"、"两个轮子"属于这个对象的属性, 而"都能够当做交通工具"属于该对象具有的行为, 也称方法。
类是属于用户自定义的数据类型, 并且该类型的数据具有一定的行为能力, 也就是类中说描述的方法。通常来说, 一个类的定义包含两部分的内容, 一是该类的**属性**, 另一部分是它所拥有的**方法**。以 "人类" 这个类来说, 每个人都有自己的姓名、年龄、出生日期、体重等, 为 人类 的属性部分, 此外, 人能够吃饭、睡觉、行走、说话等属于人类所具有的行为。
上面举例中所描述的 "人" 类仅仅是具有人这种对象的最基础的一些属性和行为, 可以称之为人的"**基类**"。 再说说一些具有一些职业的人, 例如学生, 一个学生还具有"基类"中所没有的属性, 如学校、班级、学号; 也可以具有基类所不具有的行为, 如每天需要去上课, 需要考试等。
学生类可以看做是基类的一个扩展, 因为他具有基类的所有属性和行为, 并且在此基础上增加了一些基类所没有的属性和行为, 像"学生"这样的类称为"人类"这个基类的"**派生类**"或者"**子类**"。在学生的基础上海可以进一步的扩展出其他更高级的类, 如"研究生"类。
到此, 我们不再更深的去介绍类的其他相关知识。
**二、C++类的定义**
C++中使用关键字 **class** 来定义类, 其基本形式如下:
```cpp
class 类名{
public:
//公共的行为或属性
private:
//公共的行为或属性
};
```
说明:
①. 类名 需要遵循一般的命名规则;
②. **public** 与 **private** 为属性/方法限制的关键字, private 表示该部分内容是私密的, 不能被外部所访问或调用, 只能被本类内部访问; 而 public 表示公开的属性和方法, 外界可以直接访问或者调用。
一般来说类的属性成员都应设置为private, public只留给那些被外界用来调用的函数接口, 但这并非是强制规定, 可以根据需要进行调整;
③. 结束部分的分号不能省略。
三、C++类的实现
在上面的定义示例中我们只是定义了这个类的一些属性和方法声明, 并没有去实现它, 类的实现就是完成其方法的过程。类的实现有两种方式, 一种是在类定义时完成对成员函数的定义, 另一种是在类定义的外部进行完成。
1>. 在类定义时定义成员函数
成员函数的实现可以在类定义时同时完成, 如代码:
```cpp
#include <bits/stdc++.h>
using namespace std;
class Point{
public:
void set(int x, int y) {
sum = x + y;
}
void print() {
cout << "sum = " << sum << endl;
}
private:
int sum;
};
int main(){
Point M;
M.set(10, 20);
M.print();
return 0;
}
```
运行输出:
```
sum = 30
```
与类的定义相比, 在类内实现成员函数不再是在类内进行声明, 而是直接将函数进行定义, 在类中定义成员函数时, 编译器默认会争取将其定义为 inline 型函数 2>. 在类外定义成员函数
在类外定义成员函数通过在类内进行声明, 然后在类外通过作用域操作符 **::** 进行实现, 形式如下:
```
返回类型 类名::成员函数名(参数列表){
//函数体
}
```
```cpp
#include <bits/stdc++.h>
using namespace std;
class Point{
public:
void set(int x, int y);
void print();
private:
int sum;
};
void Point::set(int x, int y) {
sum = x + y;
}
void Point::print() {
cout<< "sum = " << sum << endl;
}
int main(){
Point M;
M.set(10, 20);
M.print();
return 0;
}
```
依 set 成员函数来说, 在类内声明的形式为 **void set(int x, int y);** 那么在类外对其定义时函数头就应该是 **void Point::set(int x, int y)** 这种形式, 其返回类型、成员函数名、参数列表都要与类内声明的形式一致。
作者学得不够深, 所以只能写这么点。