码迷,mamicode.com
首页 > 编程语言 > 详细

C++(二十六) — 构造函数、析构函数、对象数组

时间:2018-12-27 23:07:24      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:顺序   完成   初始   构造   c++   end   cout   拷贝构造函数   出错   

1、构造函数

(1)每个类都要定义它自己的构造函数和析构函数,是类的成员函数。

  特点:名称与类名相同;没有返回值;一定是共有函数,可以直接访问类内所有成员函数;可以带默认形参,可以重载;

class clock
{
public:
    // 无参构造函数
    clock()
    {
        cout << "无参构造函数" << endl;
    }
    // 有参构造函数
    clock(int h, int m , int s)
    {
        hour = h;
        minute = m;
        second = s;
        cout << "有参构造函数" << endl;
    }
    //// 有默认参数值的有参构造函数
    //clock(int h=8, int m=20, int s=20)
    //{
    //    hour = h;
    //    minute = m;
    //    second = s;
    //    cout << "有默认参数值的有参构造函数" << endl;
    //}
    //拷贝构造函数完成,用一个对象初始化另一个对象
    clock(const clock &t) // const 加不加都可以
    {
        cout << "复制构造函数" << endl;
    }

private:
    int hour; int minute; int second;
};

void main()
{
    clock myclock;  // 调用无参构造函数
    //clock myclock_1();// 调用有参构造函数,此时会出错,因为没有传参数
    clock myclock_2(8,20,20);// 有参构造函数,必须要写上参数

    clock myclock_3(myclock_2);// 调用复制构造函数

    system("pause");
}

(2)注意:

  (1)类中没有定义任何构造函数时,才使用默认构造函数;

  (2)不能同时出现无参构造函数和带有全部默认参数值的构造函数;二者只能出现一个;

  (3)复制构造函数,使用一个已存在的对象,初始化一个新的同类对象。如果未定义,系统将会自动生成;但是,如果申请动态空间(堆空间),则必须定义。

 2、对象数组

  解释为什么需要构造函数,在定义对象数组时,自动初始化。

class student
{
public:
    student(int, char*);
    student();
    ~student();
    void set(int i, char* c);
    void printstu()
    {
        cout << "id: " << id << "   name: " << name << setw(5) << endl;
    }
private:
    int id;
    string name;
};
student::student()
{
    cout << "默认无参构造函数" << endl;
}
student::student(int i, char* c)
{
    id = i;
    name = c;
    cout << "有参构造函数" << endl;
}
student::~student()
{
    cout << "析构函数" << endl;
}

void student::set(int i, char* c)
{
    id = i;
    name = c;
}

void main()
{
    // 对象数组
    student stu[5] = {
        student(1,"li"),
        student(2,"wang")
    };
    stu[2].set(3, "zhao");
    system("pause");
}

  定义两个构造函数,此时定义对象数组时,可以不用初始化。

  构造函数在定义对象时调用,析构函数在程序结束时调用,而且,析构顺序与构造顺序相反。

 

C++(二十六) — 构造函数、析构函数、对象数组

标签:顺序   完成   初始   构造   c++   end   cout   拷贝构造函数   出错   

原文地址:https://www.cnblogs.com/eilearn/p/10187149.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!