C++类<二>:构造函数
来源:互联网 发布:免费wifi无线上网软件 编辑:程序博客网 时间:2024/05/31 13:15
上篇随笔中提到构造函数的介绍,这篇来深究一下.
构造函数名与类名一致.
构造函数的工作室保证每个对象的数据成员具有合适的初始值.例书店书籍构造体
class Sales_item{
public:
bool same_isbn(const Sales_item &rhs) const //判断两书的isbn是否相同.
{ return isbn == rhs.isbn; }
explicit Sales_item(const std::string &book):
isbn(book), units_sold(0), revenue(0.0){}
explicit Sales_item(std::istream &is);
private:
std::string isbn;
unsigned int units_sold;
double revenue;
};
一,构造函数可被重载
Sale_item(const std::string &book): 初始化数据 {};
Sale_item(std::istream &is);
Sale_item();
均为构造函数,使用时根据传入实参来决定使用哪个函数.
需要创建该类型的对象,编译器就会运行一个构造函数
二,构造函数初始化式
① Sale_item(): 初始化列表(初始化阶段) {(普通的计算阶段)}
在普通的计算阶段进行对数据成员赋值可达同样效果,但是.......
没有默认构造函数的类类型的成员 & const数据成员 & 引用类型成员
这三种数据成员都必须在初始化列表中进行初始化.
②按初始化次序初始化
Sale_item(int val):j(val), i(j) {}
这种有先后传递关系的初始化必须按照初始化顺序排列;
③,默认构造函数
只有当一个类没有定义构造函数时,编译器才会自动生成一个默认构造函数
(包括定义了非空参数构造函数,编译器都不会合成默认构造函数)
Sale_item myobj = Sale_item();
创建并初始化一个类对象用来初始化myobj.
三,隐式类类型转换,显式使用构造函数.
①隐式类类型转换
调用成员函数same_isbn(const Sale_item &rhs)时,函数期待一个Sale_item类型的形参,
若此时传入字符串"9-999-99999-9". 即myobj.same_isbn("9-999-99999-9");
编译器使用一个接受一个 string 的 Sale_item 构造函数从字符串生成一个新的 Sale_item 对象(临时的)
传给 same_isbn 函数. 这个行为称为隐式类类型转换.
②显式使用构造函数
如篇头类中构造函数所示,于构造函数前添加 explicit ,则所产生的 Sale_item 对象在使用成员函数时的
隐式类类型转换将被抑制.
此时需要使用显式构造函数传递实参给函数 same_isbn() .即
myobj.same_isbn(Sale_item("9-999-99999-9"));
四,类成员的显式初始化
struct Data{ int ival ; char *ptr; };
Data val1 = { 0 , 0};
Data val2 = { 1024, "A string"};
显示初始化只需按类的数据成员的定义顺序来进行逐项初始化.
- 构造函数 C++(二)
- C++类<二>:构造函数
- 初入C++(二)类和对象,构造函数,析构函数
- 【C++】派生类构造函数
- [c++]类的构造函数
- C++-类的构造函数
- 【C++】类构造函数 & 析构函数
- **C++** 刷题笔记二 子类调用父类构造函数的方法
- 三角形类的构造函数(二)
- 类的构造函数(二)
- 二、C++ 构造函数
- 构造函数(二)
- 二阶构造函数
- 逆向 C++-- 识别类及其构造函数
- C 类对象的拷贝构造函数
- C#Static类和Static构造函数
- (C++)定义类的拷贝构造函数
- C++, 类的构造函数 语法练习
- c#简单绘图
- C++类<一>:类的定义和声明&类的作用域
- 文本数据类型强调说明
- POJ 3461 Oulipo
- OpenCL学习笔记(一)
- C++类<二>:构造函数
- 开发者必备的6款源码搜索引擎
- 字节序
- oracle安装后eclipse版本过低
- uboot下的UART驱动
- C++类<三>:友元
- 华为时间管理之仁者见仁
- 关于指针
- Ruby学习笔记(二)