#CPP10. 【Level 0】类简介
【Level 0】类简介
类(class)
在全面掌握 STL
之前,我们先简单认识 C++ 中的类,即 class
在 C 语言中,我们使用 struct
来组织数据
// C 语言中的结构体
struct Point {
double x, y;
};
但想要在其中添加函数较为麻烦,需要使用函数指针的手段。
在 C++ 中,class
扩展了这一概念,使得 数据 和 操作数据的函数 可以封装在一起。
// C++ 中的类
class Point {
public:
double x;
double y;
void display() {
std::cout << "Point(" << x << ", " << y << ")" << std::endl;
}
};
注意:在 C++ 中,struct
和 class
的区别仅在于默认的 访问权限(见后文)。struct
也可以包含成员函数。
与 struct
类似,定义一个类也是定义了一种独特的数据类型,我们依然可以使用如下所示的方式创建一个 Point
类型的变量 p
。
int main() {
Point p;
p.x = 3, p.y = 4;
p.display(); // 输出:Point(3, 4)
return 0;
}
构造函数(constructor)
当然,实际上的类远比示例中的复杂,很难在外部进行完整的初始化过程,因此我们有 构造函数
的概念
构造函数与类同名且没有返回值,在创建对象时自动执行,如下所示:
class Point {
private:
double x;
double y;
public:
// 构造函数
Point(double x_value, double y_value) {
x = x_value;
y = y_value;
}
void display() {
std::cout << "Point(" << x << ", " << y << ")" << std::endl;
}
};
int main() {
Point p(3.0, 4.0);
p.display(); // 输出:Point(3, 4)
return 0;
}
此时如果直接使用 Point p;
构造对象则不再被允许。这是因为在你没有定义任何构造函数时,其实类带有一个默认的构造函数,你在声明
class Point {
public:
double x, y;
};
时,相当于
class Point {
public:
double x, y;
Point() {}
};
而一旦你声明了自己的构造函数,无论参数列表与其是否相同,默认的构造函数都会被去除。
顺带一提,可以看到被 public
修饰的段落,可以在类外部访问,而 private
则不能。
分离声明与实现
如果类比较复杂,直接在声明中实现,实际上不利于我们观察类的结构,因此通常我们将复杂类的声明与实现分离开,以便于管理。
例如,在 Point.h
中声明类的变量和函数
class Point {
private:
double x, y;
public:
// 构造函数
Point(double x_value, double y_value);
// 打印类的信息
void display();
// 计算到原点的距离
double distance();
};
在 Point.cpp
或者其它地方实现这些函数
Point::Point(double x_value, double y_value) {
x = x_value;
y = y_value;
}
void Point::display() {
std::cout << "Point(" << x << ", " << y << ")" << std::endl;
}
double Point::distance() {
return sqrt(pow(x, 2) + pow(y, 2));
}
Description
实现一个名为 Circle
的类,用于表示圆。要求如下:
- 私有成员变量
radius
(double
类型),表示圆的半径
- 公共成员函数
- 1 构造函数
- 默认构造函数:将半径初始化为 0
- 带参数的构造函数:接受一个
double
类型的参数,用于初始化半径
- 2 成员函数
void setRadius(double r)
:设置圆的半径为r
double getRadius()
:获取圆的半径double getArea()
:计算并返回圆的面积double getCircumference()
:计算并返回圆的周长
- 1 构造函数
Format
Input
输入有若干行,每行先是一个字符串,可能是 R
, A
, C
或者 set
,其含义依照上面要求所示,如果是 set
,其后有一个值,表示设置的半径。
Output
以空格分隔的若干个浮点数,精确到小数点后 3 位,其个数与查询的次数相同,表示每次查询的结果。
Samples
R
A
C
set 5.0
A
C
R
A
0.000 0.000 0.000 78.540 31.416 5.000 78.540
set 1000.0
A
C
R
3141592.654 6283.185 1000.000
Related
In following contests: