类和对象2-默认成员函数(构造析构)
发布日期:2021-09-19 03:18:21 浏览次数:1 分类:技术文章

本文共 2407 字,大约阅读时间需要 8 分钟。

类有六个成员函数: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)  "<
<< 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;};

转载地址:https://blog.csdn.net/audience_fzn/article/details/78341164 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:AVl树
下一篇:类和对象1-this指针

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月07日 11时17分59秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

Spring注解驱动开发第45讲——Spring IOC容器创建源码解析(五)之初始化事件派发器 2021-06-30
Spring注解驱动开发第46讲——Spring IOC容器创建源码解析(六)之初始化所有剩下的单实例bean(上) 2021-06-30
Spring注解驱动开发第47讲——Spring IOC容器创建源码解析(七)之初始化所有剩下的单实例bean(下) 2021-06-30
Spring注解驱动开发第48讲——Spring IOC容器创建源码解析(八)之完成BeanFactory的初始化创建工作,最终完成容器创建 2021-06-30
Spring注解驱动开发第49讲——Spring IOC容器创建源码解析(九)之Spring IOC容器创建源码总结 2021-06-30
IntelliJ IDEA快速入门 | 第一篇:你不会还不知道IntelliJ IDEA吧!不要太low哦! 2021-06-30
Spring Boot 2从入门到入坟 | 底层注解篇:@ConfigurationProperties配置绑定 2021-06-30
Spring Boot 2从入门到入坟 | 自动配置篇:源码分析之自动包规则原理 2021-06-30
Spring Boot 2从入门到入坟 | 自动配置篇:源码分析之初始加载自动配置类 2021-06-30
Spring Boot 2从入门到入坟 | 最佳实践篇:Spring Boot应用该如何编写? 2021-06-30
Spring Boot 2从入门到入坟 | 最佳实践篇:使用Lombok插件来简化JavaBean的开发 2021-06-30
Spring Boot 2从入门到入坟 | 最佳实践篇:devtools开发者工具的简单使用 2021-06-30
Spring Boot 2从入门到入坟 | 最佳实践篇:Spring Initailizr的使用 2021-06-30
Spring Boot 2从入门到入坟 | 配置文件篇:yaml语法详解 2021-06-30
Eclipse环境下如何配置Tomcat,并且把项目部署到Tomcat服务器上 2021-06-30
如何将Eclipse中的Web项目自动部署到Tomcat? 2021-06-30
Java Web基础入门第八讲 Java Web开发入门——初始WEB服务器 2021-06-30
Java集合框架——Map 2021-06-30
常用API(一)——String、StringBuffer与基本类型包装类 2021-06-30
第三章——构建模块 2021-06-30