类的默认成员函数

原创 2017年10月07日 08:57:54
  • 类的默认成员函数
    构造函数
    构造函数是为了初始化在类中定义的私有成员变量,且在定义创建对象时自动执行一次的公有成员函数。
    专属特征:
    1>,构造函数的函数名与类名相同,且无返回值;
    2>,构造函数定义在类内类外都是可以的,定义在类外时要用 :: 进行说明是哪个类;
    3>,构造函数支持重载;
    4>,构造函数是特殊的成员函数没有隐含的this形参;
    5>,构造函数在实例化对象是自动调用,如果没有在类中定义构造函数时,编译器会自动生成一个缺省的构造函数,缺省的构造函数只能有一个。
class Time
{
   public:
         Time()  //无参的构造函数相当于默认的构造函数
         {
            //空
         }
         Time(int hour,int minute,int second)//有参的构造函数
         {
             _hour=hour;
             _minute=minute;
             _second=second;
         }
         Time(int hour=9,int minute=54,int second=23)//全缺省构造函数
         {
            _hour=hour;
            _minute=minute;
            _second=second;
         }
         Time(int hour,int minute=12,int second=30) //半缺省构造函数
         {
            _hour=hour;
            _minute=minute;
            _second=second;
         }
   private:
        int _hour;
        int _minute;
        int _second;
}
void Test()
{
   Time T1;//定义对象T1时自动调用无参构造函数,注意调用时不用加()
   Time T2(13,24,05);//定义对象T2时自动调用有参构造函数
   Time T3;//调用全缺省构造函数
   Time T4(12);//调用半缺省构造函数
}

拷贝构造函数
拷贝构造函数是用已有的对象初始化新的对象,是特殊的构造函数。
专属特征
1>,拷贝构造函数是构造函数的重载;
2>,如果拷贝构造函数未定义,编译器会自动生成缺省的拷贝构造函数,会依次拷贝类成员,称为浅拷贝或值拷贝;
3>,拷贝构造函数的须用引用进行传参,如:Time(const Time& T) .
疑问:如果采用值传递会出现什么情况?
传值方式会引发无穷递归调用,这是为什么呢……

class Time
{
 public:
      Time()//这里一定要写上构造函数,因为拷贝构造函数也属于构造函数,当有拷贝构造函数时,编译器不会生成默认的构造函数
        {
        }
        Time(Time T)//值传递
        {
           _hour=T._hour;
           _minute=T._minute;
           _second=T._second;
        }
 private:
         int _hour;
         int _minute;
         int _second;
}
void Test()
{
   Time T1;
   Time T2(T1);//Time T2=T1;(等价)
}

当T2初始化的时候调用了T2的拷贝构造函数,由于是值传递方式,编译器会给T分配一块临时空间,调用自身的拷贝构造函数把T1数据成员的值传给T,当调用自身的拷贝构造函数的时候又因为是值传递又会调用自身的拷贝构造函数,一直是值传递就会一直调用拷贝构造函数,无穷调用.

析构函数
析构函数是在对象生命周期结束的时候自动调用的一个成员函数,与构造函数的功能相反。
专属特征
1>,析构函数无参数,无返回值,函数名与类名相同前面加~;
2>,如果没有定义析构函数,编译器会自动生成缺省的析构函数,且一个类只能有一个析构函数,在对象生命周期结束的时候自动调用;
3>,析构函数的作用不是删除对象,而是撤销对象占用的内存之前做一些清理工作,可以将这部分内存分配给其他新对象;
4>,一般情况下,先调用的构造函数,其对应的析构函数会最后被调用。

#include<iostream>
using namespace std;
class Time
{
public:
    Time(int hour = 9, int minute = 54, int second = 23) 
    {
        _hour = hour;
        _minute = minute;
        _second = second;
    }
    ~Time()
    {
        cout <<  "tranfered" << endl;
    }
    void show()
    {
        cout << _hour << " " << _minute << " " << _second << endl;
    }
private:
    int _hour;
    int _minute;
    int _second;

};

int main()
{
    Time T;
    T.Time::~Time();
    T.show();
    system("pause");
    return 0;
}

这里写图片描述
调用析构函数以后,还输出了对象T的数据成员值,说明析构函数不释放对象。

版权声明:本文为博主原创文章,未经博主允许不得转载。

详解c++中类的六个默认的成员函数

类的6个默认的成员函数包括: 构造函数、析构函数、拷贝构造函数、赋值运算符重载函数、取地址操作符重载、const 修饰的取地址操作符重载。 (一)构造函数 构造函数,顾名思义,为对象分配空间,进行初始...
  • peiyao456
  • peiyao456
  • 2016年07月06日 13:01
  • 6918

类的六大默认成员函数

1. 构造函数 如果类的成员变量为私有的,要对这些成员初始化必须调用一个共有的成员函数来进行. 这个共有的成员函数在定义对象的同时会自动执行一次,被调用的函数称为构造函数. 构造函数的特点: ...
  • CC285494320
  • CC285494320
  • 2016年06月02日 15:43
  • 1470

【C++缺省函数】 空类默认产生的6个类成员函数

1、缺省构造函数。 2、缺省拷贝构造函数。 3、 缺省析构函数。 4、缺省赋值运算符。 5、缺省取址运算符。 6、 缺省取址运算符 const。 class A { public:...
  • Irean_Lau
  • Irean_Lau
  • 2015年06月07日 00:03
  • 3167

String类的四个默认成员函数

#include #include #pragma warning (disable:4996) using namespace std; class String { public: Str...
  • yangrujing
  • yangrujing
  • 2015年08月23日 20:58
  • 982

C++之类外定义成员函数、inline成员函数详解

在使用类函数时,要注意调用它的权限(它能否被调用)以及它的作用域(函数能使用什么范围中的数据和函数)。例如私有的成员函数只能被本类中的其它成员函数所调用,而不能被类外调用。成员函数可以访问本类中任何成...
  • Bruce_0712
  • Bruce_0712
  • 2017年02月23日 22:19
  • 1857

C++中的空类默认产生哪些类成员函数?

如果你只是声明一个空类,不做任何事情的话,编译器会自动为你生成一个默认构造函数、一个拷贝默认构造函数、一个默认拷贝赋值操作符和一个默认析构函数。这些函数只有在第一次被调用时,才会别编译器创建。所有这些...
  • will130
  • will130
  • 2015年10月09日 21:43
  • 1126

类默认的成员函数

10. C++中的空类,默认产生哪些类成员函数?[C++易]答:class Empty{public:    Empty();                          // 缺省构造函数  ...
  • gnuser
  • gnuser
  • 2009年08月23日 01:07
  • 300

类的默认成员函数

类有6个默认成员函数: 1.构造函数 2.拷贝构造函数 3.析构函数 4.赋值操作符重载 5.取地址操作符重载 6.const修饰的取地址操作符重载一:构造函数作用:对私有成员变量进行初始...
  • hudazhe
  • hudazhe
  • 2017年09月14日 01:20
  • 183

什么是类的成员函数和非成员函数

类有成员变量和成员函数。而函数中,不是任何一个类的成员的函数,就是非成员函数。例如: class A{ public:     void f1(){}; // 这个就是成员函数。   ...
  • u013152895
  • u013152895
  • 2015年03月23日 13:10
  • 1623

c++类成员函数

c++的两大特色是多态和模板。其中多态是通过继承和虚函数来实现的,其中虚函数是通过每个对象里面的虚表来实现的。如果这个对象的类有虚函数,那么这个类就有一张虚表,存的是每个虚函数的入口地址,而这个类的每...
  • yuanyirui
  • yuanyirui
  • 2009年09月25日 17:04
  • 9579
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:类的默认成员函数
举报原因:
原因补充:

(最多只允许输入30个字)