类和对象2-默认成员函数(构造析构)
来源:互联网 发布:最好玩的网络手机游戏 编辑:程序博客网 时间:2024/06/10 14:00
类有六个成员函数:1.构造函数
2.拷贝构造
3.析构函数
4.赋值操作符重载
5.取地址操作符重载
6.const修饰的取地址操作符重载
一.构造函数
类的成员变量是私有的,要对它们进行初始化,必须用一个公有的成员函数来进行,同时这个函数应该仅在定义对象是调用一次,该函数就是构造函数
1.特点:1.函数名与类名相同;
2.无返回值
3.可以重载
4.有初始化列表
class Date{public:Date(int year, int month, int day)//构造函数,没有返回值类型{_year = year;_month = month;_day = day;cout << "Date(int year, int month, int day)" << endl;}Date() //无参构造函数{cout << "Date()" << endl;}private:int _year;int _month;int _day;};
5.若没有定义,编译器会自动提供
6.无参的构造函数和带缺省值的构造函数都称为缺省构造函数(缺省构造函数只能有一个)
Date() //无参构造函数{cout << "Date()" << endl;}Date(int year = 2017,int month = 10,int day = 20) //带缺省的构造函数{_year = year; //无参构造函数和带缺省的构造函数都叫缺省构造函数,且只能有一个_month = month;_day = day;}7.创建对象时调用,且只能调用一次
2.构造函数的作用
a.构造对象
b.初始化对象
c.类型转换——构造函数为单参时(若不想类型转换,用explicit关键字)
3.构造函数的初始化列表
a.以冒号(:)开头
b.用逗号隔开每一个变量(,)
c.用圆括号()进行初始化
class Date{public:Date(int year=2017, int month=10, int day=20):_year(year)//初始化列表并不能指定数据成员的初始化顺序,初始化顺序由 变量在类中的定义顺序决定, _month(month) //对象还没有创造成功, _day(day){ //对象创建成功}private:int _year;int _month;int _day;};
注:
1)每个成员变量只能在初始化列表中出现一次
2)初始化列表仅用于初始化成员变量
3)初始化列表并不能指定成员的初始化顺序,数据的初始化顺序由变量在类中的定义决定
4)尽量避免用成员初始化成员,成员的初始化顺序最好与定义保持一致
4.必须在构造函数的初始化列表中初始化的变量
a.const修饰的变量
b.引用
c.没有缺省构造函数的类类型成员
若没有定义构造函数,系统虎皮默认合成一个构造函数。系统提供的默认构造函数,只对定义在全局作用域中的对象进行初始化(内置类型和复合类型的成员)
二.拷贝构造函数
创建对象时,使用同类型的对象来进行初始化,这时用到的构造函数称为拷贝构造函数,拷贝构造函数是特殊的构造函数
1.特点:
a.拷贝构造函数其实是构造函数的重载
b.没有返回值
c.拷贝构造函数的参数只有一个且必须使用引用传参,否则会引发无穷递归
d.若为显示定义,系统会默认缺省的拷贝构造函数
例:
class Date{public:Date(int year = 2017, int month = 10, int day = 20):_year(year), _month(month), _day(day){cout << "Date() " << this << endl;}Date(const Date& d)//拷贝构造,构造函数的重载,必须为单参 //必须为引用:_year(d._year), _month(d._month), _day(d._day){cout << "Date(const Date& d) "<<this << endl;}private:int _year;int _month;int _day;};
三.析构函数
当一个对象生命周期结束时,c++编译系统会自动调用一个成员函数,做一些清理工作,这个特殊的函数就是析构函数
1.特点:
a. 析构函数的函数名: ~类名
b.无返回值
c.无参数列表,不能重载,所以一个类只有一个析构函数
d.在对象生命周期结束时,c++系统会自动调用
e.析构函数并不是删除对象,而是做一些清理工作
class Date{public:Date(int year = 2017, int month = 10, int day = 20):_year(year), _month(month), _day(day){cout << "Date() " << this << endl;}~Date()//析构函数只有一个,且不能重载(因为没有参数列表){cout << "~Date()" << endl;}private:int _year;int _month;int _day;};
- 类和对象2-默认成员函数(构造析构)
- 十一、构造函数和析构函数(五) 空类默认产生的成员
- C++类和对象--默认成员函数
- 类 和 对象 默认成员函数
- 类和对象--默认的成员函数
- 定义长方体类,数据成员有长、宽、高,成员函数有带默认形参值的构造函数(默认长宽高分别为2.5、3.4、2)、计算体积函数,分别构造默认对象和长宽高分别为6.25、4.8、5.2的对象,输出各对象的体积
- c++中,类 和 类中成员(对象)的构造函数和析构函数的执行顺序
- 定义圆类Circle,数据成员有半径radius,成员函数有默认构造函数(默认半径为10)、构造函数、计算圆面积、圆周长以及输出函数,分别构造默认对象和半径为15的对象,输出各对象的周长与面积。
- C++ 构造函数、默认构造函数、析构函数和对象初始化
- C++学习笔记(六)-- 类和对象 构造函数和析构函数 const成员函数 this指针 对象数组 堆栈管理变量
- 类与对象(构造函数,析构函数,静态数据成员)。。。2014.5.19
- c++中类的默认四个成员函数介绍(构造函数+拷贝构造+析构函数+赋值运算符重载函数)
- 拷贝构造,深度拷贝,关于delete和default相关的操作,explicit,类赋初值,构造函数和析构函数,成员函数和内联函数,关于内存存储,默认参数,静态函数和普通函数,const函数,友元
- effective C++之关于类成员的初始化,及默认构造函数、默认赋值构造函数和赋值函数
- 类和对象(四个默认成员函数+运算符重载)
- 类和对象->四个默认成员函数->运算符重载
- CPP类和对象1-四个默认成员函数
- 类和对象、访问限定符、默认成员函数
- react_basic(6)
- Python 操作MySQL数据库
- SwapBuffer驱动进阶(二)
- JS的tostring()和toLocaleString()的区别
- 自定义标题栏
- 类和对象2-默认成员函数(构造析构)
- jxl读写excel文件(util)
- [BIT0429]-Java-接口之間的多繼承關係
- SwapBuffer驱动进阶(一)
- android studio 引入glide4.2报错
- zheng项目-从rpc-service开始!
- java常用类库---Math与Random类
- JAVA学习笔记13——Structs2框架第三章
- 每个程序员应该知道的最基本的东西是什么?