类和对象(二)类的6个默认成员函数

本文详细介绍了C++中的6个默认成员函数:构造函数(无参构造、默认构造、成员变量初始化、初始化列表)、析构函数、拷贝构造函数、运算符重载(特别是赋值运算符)以及const成员函数。强调了构造函数和析构函数在对象生命周期中的作用,以及拷贝构造函数和赋值运算符重载在处理对象复制时的区别。
摘要由CSDN通过智能技术生成


前言

本篇文章将带大家进一步了解C++的基础知识,本节将介绍一些C++的六个默认成员函数。


在这里插入图片描述

1. 构造函数

构造函数是特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员都有一个合适的初始值,并且在对象的生命周期内只能调用一次。

注:构造函数的作用是初始化对象。
单参构造函数的作用是隐式类型转化

特征:

1.函数名和类名相同

2.无返回值(void也不写)

3.对象实例化时编译器自动调用对应的构造函数

4.构造函数可以重载

class Date
{
public :
 // 1.无参构造函数
     Date ()
     {}
 
 // 2.带参构造函数
     Date (int year, int month , int day )
     {
         _year = year ;
         _month = month ;
         _day = day ;
     }
private :
     int _year ;
     int _month ;
     int _day ;
};
void TestDate()
{
     Date d1; // 调用无参构造函数
     Date d2 (2015, 1, 1); // 调用带参的构造函数

     // 注意:如果通过无参构造函数创建对象时,对象后面不用跟括号,否则就成了函数声明
     // 以下代码的函数:声明了d3函数,该函数无参,返回一个日期类型的对象
     Date d3(); 
}

1.1无参构造函数

如果类中没有显示定义构造函数,则C++编译器会自动生成一个无参的默认构造函数

class Date
{
public:
 /*
 // 如果用户显式定义了构造函数,编译器将不再生成
     Date (int year, int month, int day)
     {
         _year = year;
         _month = month;
         _day = day;
 	}
 */
private:
     int _year;
     int _month;
     int _day;
};
void Test()
{
     // 没有定义构造函数,对象也可以创建成功,因此此处调用的是编译器生成的默认构造函数
     Date d; 
 }

1.2默认构造函数

默认构造函数只能有一个。无参构造函数、全缺省构造函数、我们没写编译器默认生成的构造函数,都可以认为是默认成员函数。

// 默认构造函数
class Date
{ 
public:
     Date()
     {
         _year = 1900 ;
         _month = 1 ;
         _day = 1;
     }
 
     Date (int year = 1900, int month = 1, int day = 1)
     {
         _year = year;
         _month = month;
         _day = day;
     }
private :
     int _year ;
     int _month ;
     int _day ;
};
// 以下测试函数不能通过编译,因为默认构造函数只能有一个
void Test()
{
     Date d1; 
 }

1.3成员变量的命名风格

class Date
{
public:
     Date(int year)
     {
         _year = year;
     }
private:
     int _year;
};
// 或者这样。
class Date
{
public:
     Date(int year)
     {
         m_year = year;
     }
private:
     int m_year;
};

1.4构造函数的赋值

在创建对象时,编译器通过调用构造函数,给对象各个成员变量一个合适的初始值

class Date
{
public:
 Date(int year, int month, int day)
 {
 _year = year;
 _month = month;
 _day = day;
 }
 
private:
 int _year;
 int _month;
 int _day;
};

虽然上述构造函数调用之后,对象中已经有了一个初始值,但是不能将其称作为类对象成员的初始化,构造函数体中的语句只能将其称作为赋初值,而不能称作初始化。因为初始化只能初始化一次,而构造函数体内可以多次赋值。

1.5初始化列表

概念:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个成员变量后面跟一个放在括号中的初始值或表达式。<

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值