类的定义
C++类的关键字是class,学过c的朋友们可能会觉得和结构体struct有点像。
在C++中struct也可以定义类,但和class定义的有所区别。
我们还是推荐使用class。
类里面会有成员变量、成员函数的定义和声明、构造函数、拷贝构造函数、析构函数、运算符重载函数等等。。待会你就知道啦.
下面以日期类为例讲解类。
类的基本格式
class Date
{
};
class+类的名字+{},记得花括号之后要有英文的逗号。
类的内容就写在花括号里面。
类域(访问限定符)
类定义了一个新的作用域,
类的默认访问权限是私有的(private),
类外的函数无法访问类内的东西,
看下面这段代码
class Date
{
public:
Date();//构造函数
~Date();//析构函数
private:
int _year;
int _month;
int _day;
};
把注意力放在public和private,这俩就是访问限定符。
有了public ,在类外就可以访问Date()和~Date().
有了private,只有在类内才能访问_year,_month,_day.
给大家看看private是如何限制类外访问的。。
如果把_year的声明放到public访问限定符之下,
编译器就不会报错了。。
类和对象
刚刚我们创建了Date类,
d1,d2,d3,都是Date类实例化的对象。
一个Date类实例化出3个对象d1,,d2,d3.
一个类可以有多个对象。
构造函数
构造函数的名字和类名一模一样,
我们定义对象时,什么参数都不传,
系统会帮我们生成无参的构造函数。
不传参数就可以调用的构造函数叫做默认构造,
以Date类为例,
以下三种构造函数都是默认构造函数。
这三种默认构造函数只能写一种。
当我们这样定义d1时,什么参数都没传,就会调用默认构造函数。。
当然我们还是建议定义时传参,就像下面这样:
析构函数
析构函数的主要用处在于,当你开辟了一块内存空间,用完了要记得释放。。
如:
class Date
{
public:
int* _year;
int* _month;
Date()
{
_year = (int*)malloc(sizeof(12));//开空间
_month = new int[4];//开空间
}
~Date()
{
free(_year);//释放空间
_year = nullptr;
delete[]_month;//释放空间
}
};