C++之构造函数与初始化列表
来源:互联网 发布:linux命令入门 编辑:程序博客网 时间:2024/06/12 20:15
1.构造函数的概念和使用 (见代码03class.cpp)
1.1 概念
函数名与类名相同,函数没有返回值类型(void 也没有),参数随意的函数叫构造函数1.2 语法格式:
class 类名{
类名(形参列表)
{
构造函数体;
}
};
1.3 构造函数的两种形式:
(1)隐式构造Student s("wangfei",35);
(2)显式构造
Student s = Student("wangfei",35);
可以在堆区开辟:
Student* ps = new Student("wangfei",35);
注意:
(1)当一个对象被构造时会自动调用构造函数,构造函数一般用于初始化对象中的成员变量
(2)如果没有一个为类中提供任何构造函数,系统就会提供一个无惨构造函数(叫缺省构造函数,也叫默认构造函数);如果为该类提供了至少一个构造函数,无论是否有参数,系统都不再提供任何形式的构造函数 (见04class.cpp)
扩展:
无参构造函数不是指构造函数中必须没有参数,而是指可以用无参的形式去调用(也就是有缺省值)
2.初始化列表及其必要性
2.1语法格式
class 类名{
类名(形参表): 成员变量名(形参名),...--->使用()中形参值来初始化括号左边的成员变量
{
构造函数体;
}
};
2.2注意:
成员变量的初始化顺序和初始化列表中的顺序无关,而是取决于成员变量的声明顺序笔试题:
class Dumy
{
private:
int m_len;
string m_str;
public:
Dumy(string str):m_str(str),m_len(m_str.length()){}
};
问题: 先给m_len 初始化,此时m_str还没有初始化,所以m_len得到的结果是无效值
解决办法:
Dumy(string str): m_str(str),m_len(str.length()){}
2.3初始化列表的必要性
复习:C语言中没有明显的区分:int i = 10;//声明、定义、初始化
在C++中:
声明:类定义时的成员变量(不分配内存)
定义:当使用类创建对象时,对象中对应的成员变量才会被定义,才会分配内存
初始化:在创建对象时,系统会自动调用构造函数进行初始化,如果构造函数中指定了初始化方式,那么采用指定的初始化方式进行初始化,如果没有指定初始化方式,系统采用默认的初始化方式(对于基本数据类型不做初始化,对于类类型调用默认的构造函数进行初始化);(见代码03init.cpp)
注意:
(1)类中包含常量和引用型的成员变量时,必须通过构造函数和初始化列表的方式进行显式的初始化(见代码04inti.cpp)
(2)在子类中显式地构造其基类部分(以后讲到)
(3)尽可能采用初始化列表的方式进行成员变量的初始化
3.支持自定义类型转换的构造函数 (见代码 05construct.cpp)
在目标类型中定义构造函数的格式目标类::目标类(const 源类型& 变量名){}
可以实现从源类型 到目标类型的隐式类型转换
如:Point3d::Point3d(const Point2d& pt):m_x(pt.m_x),m_y(pt.m_y),m_z(200){}
可以使用explicit 关键字修饰构造函数,表示该构造函数只能用于显示类型转换,从而防止潜在的错误;
0 0
- C++之构造函数与初始化列表
- 构造函数与初始化列表
- 自己的练习二之构造函数与初始化列表
- 【C/C++】构造函数的初始化列表
- 构造函数初始化列表(C++)
- c++初始化列表与构造函数
- C++构造函数初始化列表与赋值
- 初始化列表 与 构造函数体
- C++构造函数初始化列表与赋值
- C++构造函数初始化列表与赋值
- C++构造函数初始化列表与赋值
- C++构造函数初始化列表与赋值
- C++构造函数初始化列表与赋值
- C++构造函数初始化列表与赋值
- C++构造函数初始化列表与赋值
- C++初始化列表与构造函数异同
- C++构造函数初始化列表与赋值
- C++构造函数之MIL(初始化列表)
- LeetCode Spiral Matrix
- 自然语言处理公开课
- 云服务
- 2011 ACM-ICPC 成都赛区A题 Alice and Bob (博弈动规)
- Spark 0.9的安装配置
- C++之构造函数与初始化列表
- TOJ 3425: Generic Cow Protests -- 树状数组
- android设计模式之建造者模式
- 传日本推演钓鱼岛冲突:称必须为出兵松绑
- 十五个说话用脑、做事慎言的技巧
- 基于 控制台 简易 学生信息管理系统 (增、删、改)
- 栈与队列的使用
- Java Card Applet Development——环境搭建及基础概念
- 关于“C++primer plus第六版课后编程题答案”18章的说明