C++类
作者:互联网
【C++】C++类
1.基本的class语法
类(class)由成员(members)组成,这些成员可以是数据也可以是函数。此时的函数叫做成员函数。类的每一个实例都是一个对象。每一个对象都包含有由类所指定的数据成分(除数据成分是 static 型的)。成员函数用于处理对象,所以成员函数也被叫做方法。
权限修饰符private和public。public属性的成员可以被任何类中的任何方法访问,而private属性的成员只能被它所在的类中的方法访问。对象是通过public成员函数来访问的,将数据成员声明为private型可以限制访问类的内部细节,这叫做信息隐藏。在一个类中,所有的成员默认都是private的,因此初始的public是不可选的。
构造函数是一个描述如何构建类的实例的方法。如果没有显示定义的构造函数则使用语言默认功能自动生成将数据成员初始化的构造函数。
2.构造函数的附加语法和访问函数
默认参数
如下代码:
class IntCell
{
public:
/*
* 构建 IntCell 对象,初始化为0
*/
IntCell()
{storedValue = 0;}
/*
* 构建 IntCell 对象
* 初始化为传入参数 initialValue
*/
IntCell(int initialValue)
{storedValue = initialValue;}
···
private:
int storedValue;
};
有参数是采用下方的构造函数,零参数时利用上面的构造函数。默认参数可以用于任何函数,但是最常见的还是用在构造函数上。
初始化表列
如下代码:
class IntCell
{
public:
explicit IntCell(int initialValue = 0)
: storedValue{ initialValue }{ } #5
···
private:
int storedValue;
};
第5行使用了初始化表列,直接将数据成员初始化。用初始化表列代替函数体中的赋值语句几乎没有什么区别,但是对于数据成员是类类型其初始化过程非常复杂的情况,使用初始化表列就节省时间了。但是有一些情况是必须的,例如数据成员为 const 型(即当对象被构建之后该 const 数据成员将不可改变),那么该数据成员的值只能在初始化表列中被初始化。还有如果数据成员本身是一个类类型,并且该类型又没有0作为参数的构造函数,那么这个成员必须在初始化表列中被初始化。
explicit构造函数
我们应该使所有的单参数构造函数为explicit的,为避免后台类型转换。否则就会有一些宽松的法则允许不带显示强制转换操作的类型转换。
例如:
IntCell obj;
obj = 37;
按理来说不应该编译,因为类型不匹配,37不是 IntCell 型的,但是单参数构造函数定义了一个隐式类型转换,在隐式转换过程中就会创建一个临时对象,这个对象使得赋值(或函数参数)兼容,此时编译器将把上述赋值转化为
IntCell temporary = 37;
obj = temporary;
而 explicit 的使用则意味着单参数构造函数不能用来显式的生成 temporary 。所以应用了 explicit 声明编译器就会正确的指出最开的类型不匹配的问题。
常成员函数
一个检查但是不改变其对象状态的成员函数叫做访问函数。而改变状态的函数叫做修改函数。因为其修改了对象的状态。
在c++中可以把每个函数标记为访问函数或者修改函数。修改函数不能用于常对象上。默认情况下所有的成员函数都是修改函数。要想使得成员函数为访问函数,则必须在终止参数类型表列的封闭圆括号的后面加上关键字 const(以后再讨论) 。这种常态性是特征的一部分。
例如:
class IntCell
{
public:
···
int read() const
{return storedValue; }
}
【未完待续···】
标签:初始化,IntCell,函数,成员,表列,C++,构造函数 来源: https://blog.csdn.net/weixin_43960998/article/details/113780048