引出:当一个对象被实例化之后,怎么对其类 成员赋值呢?从前面整理的内容来看,我们在封装类的时候,可以指定一些函数来对成员进行赋值,比如: 但是这样的话,每次实例化对象时,都要去调用这个函数,未免太麻烦!嘛能不能实例化对象的时候就给对象设好初始值呢? 当然是可以的,构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员 都有 一个合适的初始值,并且在对象的生命周期内只调用一次。 构造函数:只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),在用已存在的类类型对象 创建新对象时由编译器自动调用。 特征 : 用法: 运算符重载是具有特殊函数名的函数,也具有其返回值类 型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。 注意: 与构造函数功能相反,析构函数不是完成对象的销毁,局部对象销毁工作是由编译器完成的。而 对象在销毁时会自动调用析构函数,完成类的一些资源清理工作。 其特征如下: 这两个默认成员函数一般不用重新定义 ,编译器默认会生成。
(一) 类的6个默认成员函数
(1)构造函数
class data { public: void Initdata(int year,int month,int day) { m_year = year; m_month = month; m_day = day; } private: int m_year; int m_month; int m_day; }; class data { public: //无参构造函数 data() { m_year = 2000; m_month = 00; m_day = 00; } //带参构造函数 data(int year,int month,int day) { m_year = year; m_month = month; m_day = day; } void Show()const { cout << m_year << "-" << m_month << "-" << m_day << endl; } private: int m_year; int m_month; int m_day; }; int main() { data d1;//调用无参构造函数,注意:不能加括号 data d2(2020, 6, 4);//调用带参构造函数 d1.Show(); d2.Show(); }
(2)拷贝构造函数
data(const data &d) { m_year = d.m_year; m_month = d.m_month; m_day = d.m_day; } int main() { data d2(2020, 6, 4);//调用带参构造函数 data d3(d2);//调用拷贝构造函数 }
(3)赋值操作符重载
函数名字为:关键字operator后面接需要重载的运算符符号。
函数原型:返回值类型 operator操作符(参数列表)//赋值——等号重载 data& operator=( const data &d) { if (this != &d) { m_year = d.m_year; m_month = d.m_month; m_day = d.m_day; } return *this; } int main() { data d1;//调用无参构造函数,注意:不能加括号 data d2(2020, 6, 4);//调用带参构造函数 data d4; d4 = d2;//用d2给d4赋值 }
(4)析构函数
~data() { }
(5)普通对象和常对象取地址
data* operator&() { return this; } const data* operator&()const { return this; }
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算
官方软件产品操作指南 (170)