【C++】初步认识“类”
文章目录
简介
!!!本文的源码均来自于《C++ Primer》第五版!!!(可能会稍作修改)
The source codes in this article are all from C++ Primer, The Fifth Edition
1. 类的内容
1.1. 类成员
成员变量:存储于类中的局部变量,可供类实例使用
成员函数:又叫做方法,存储于类中的函数,可供类实例调用
class MyInt
{
private:
int val = 10; // 这是一个成员变量
public:
int SetVal(const int val) // 这是一个成员函数
{
this->val = val;
}
int GetVal() const // 这是另一个成员函数
{
return this->val;
}
};
何为this:this其实是一个指向类实例本身的指针,它用于确保我们在类函数内不会对使用的变量产生歧义(例如上面的SetVal成员函数中,函数参数与成员变量同名,这时候我们就可以用this来区分)
const修饰参数:被const修饰的参数无法在函数内被更改
int SetVal(const int val)
{
val = 5; // 这行代码非法,因为妄图更改const参数
this->val = val;
}
const修饰成员函数:先看上面的GetVal函数,这个函数是被const修饰的,意思就在于我们视this为一个指向常量的指针,因此在次函数中,我们无法修改成员变量的值,下面的GetVal函数就是例子
- const类实例:常量类实例只能调用const成员
- mutable成员变量:被mutable修饰的成员变量可供const成员函数修改,访问
int GetVal() const
{
this->val = 0; // 这一行非法,因为在const成员函数中修改了成员变量的值
return this->val;
}
访问级别:
- 私有(private):类成员仅供类实例内部使用
- 公有(public):类成员可供外界调用(修改,读取)
- 保护级(protected):可供所有有继承关系的子类使用(这个在之后多态的文章细说)
- 友元(friend):
1.2. 类的构造器
构造函数(Constructor):用于初始化类实例的函数,一般会初始化成员变量的值
- 构造函数是共有函数:由于构造函数是由外界调用来初始化实例,构造函数要被声明为共有的
MyInt(const int inputVal) // 这是一个构造函数,初始化了val的值
: val{ inputVal }
{
}
默认构造函数(Default Constructor):如果我们不主动写构造函数,那么类会默认拥有一个无参数传递的构造函数
- 如果成员变量有默认值,则使用默认值(比如1.1的代码中,val的默认值设为了10)
- 如果成员变量没有默认值,则使用该类的默认值初始化(比如int类型的默认值为0)
- 如果类再没有默认值,呃,只能说明这个类不是很Well-Behaved,所以为了安全起见,还是要写自己的构造函数的
拷贝构造函数,析构函数:拷贝构造函数是将另一个类实例的内容拷贝到我们当前的类实例中,析构函数是用于释放内存的函数,对动态内存分配不了解的可以先不用管这两个内容