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

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");
}

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

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

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

时间: 2024-10-09 20:10:48

C++(二十六) — 构造函数、析构函数、对象数组的相关文章

第一百二十六节,JavaScript,XPath操作xml节点

第一百二十六节,JavaScript,XPath操作xml节点 学习要点: 1.IE中的XPath 2.W3C中的XPath 3.XPath跨浏览器兼容 XPath是一种节点查找手段,对比之前使用标准DOM去查找XML中的节点方式,大大降低了查找难度,方便开发者使用.但是,DOM3级以前的标准并没有就XPath做出规范:直到DOM3在首次推荐到标准规范行列.大部分浏览器实现了这个标准,IE则以自己的方式实现了XPath. 一.IE中的XPath 在IE8及之前的浏览器,XPath是采用内置基于A

从零开始学android&lt;ImageSwitcher图片切换组件.二十六.&gt;

ImageSwitcher组件的主要功能是完成图片的切换显示,例如用户在进行图片浏览的时候,可以通过按钮点击一张张的切换显示的图片,而且使用ImageSwitcher组件在每次切换的时候也可以为其增加一些动画的效果,此类定义如下: java.lang.Object ? android.view.View ? android.view.ViewGroup ? android.widget.FrameLayout ? android.widget.ViewAnimator ? android.wid

企业搜索引擎开发之连接器connector(二十六)

连接器通过监视器对象DocumentSnapshotRepositoryMonitor从上文提到的仓库对象SnapshotRepository(数据库仓库为DBSnapshotRepository)中迭代获取数据 监视器类DocumentSnapshotRepositoryMonitor在其构造方法初始化相关成员变量,这些成员属性都是与数据获取及数据处理逻辑相关的对象 /** This connector instance's current traversal schedule. */ pri

【Unity 3D】学习笔记二十六:unity游戏脚本(六)

在3D游戏世界中,任何一个游戏对象在创建的时候都会附带Transform(变换)组件,并且该组件是无法删除的,也不应该删除.在unity中,Transform面板一共有3个属性: Position  (位置) Rotation(旋转) Scale(缩放) 这三个值都是用来调整游戏对象在游戏界面中的位置,状态等相关参数. Position  (位置) 任何一个游戏对象的三维坐标都保存在Vector3容器中,该容器记录对象在X轴,Y轴,Z轴的坐标.一旦Vector33容器中的坐标发生变化,那么Sce

26、蛤蟆的数据结构笔记之二十六串应用之建立词索引表

26.蛤蟆的数据结构笔记之二十六串应用之建立词索引表 本篇名言:"生命是一条美丽而曲折的幽径,路旁有妍花的丽蝶,累累的美果,但我们很少去停留观赏,或咀嚼它,只一心一意地渴望赶到我们幻想中更加美丽的豁然开朗的大道.然而在前进的程途中,却逐渐树影凄凉,花蝶匿迹,果实无存,最后终于发觉到达一个荒 漠.-- 萨拉" 1.  信息检索 信息检索是计算机应用的重要领域之一.为了提高图书馆数目检索的效率,建立书名关键词索引,可以实现读者快速检索书目的自动化,即读者根据关键词索引表,读者可以方便查询到

Welcome to Swift (苹果官方Swift文档初译与注解二十六)---181~188页(第四章-- 流程控制)

Do-While  while循环的另一个版本是do-while循环,它在判断条件之前,先执行一遍循环体,然后再次执行循环体,直到条件成为false. do-while循环的通过格式: do {   statements } while condition 我们再用蛇和梯子的例子,使用do-while循环代替while循环.其中 finalSquare, board, square, 和 diceRoll 的初始化与while循环是一样的: let finalSquare = 25 var bo

Powershell管理系列(二十六)PowerShell操作之批量导出&导入邮箱

-----提供AD\Exchange\Lync\Sharepoint\CRM\SC\O365等微软产品实施及外包,QQ:185426445.电话18666943750 项目中有时候做跨林邮箱迁移的时候,条件不成熟,比如安全考虑或者其他考虑,不能做双林信任,这样就提出了一个问题,历史邮件需要使用的话怎么办,一个简单高效的解决办法就是从源森林批量导出邮件为.pst文件,在批量导入到目的域森林,具体操作如下: 1.赋予管理账号邮件导入导出权限,命令如下: cls whoami New-Manageme

攻城狮在路上(叁)Linux(二十六)--- linux文件系统的特殊查看与操作

一.boot sector 与 super block的关系: 1.boot sector用于存放引导装载程序,占用1024个字节. 2.super block的大小也为1024字节. 3.若block大小为1k,则boot sector和super block各占一个block. 4.若block大于1K(2K/4K)时,则两者都位于第一个block中. 二.磁盘空间的浪费问题:暂不考虑. 三.利用GUN的parted命令进行分区行为: 因为fdisk不支持高于2TB的分区. 命令格式: pa

二十六:Struts2 和 spring整合

二十六:Struts2 和 spring整合 将项目名称为day29_02_struts2Spring下的scr目录下的Struts.xml文件拷贝到新项目的scr目录下 在新项目的WebRoot---->WEB-INF目录下新建一个目录lib,用于存放jar包(Struts2和spring整合所需jar包) 将项目名称为day29_02_struts2Spring,WebRoot---->WEB-INF下的lib目录下的所有jar包拷贝到新项目对应的位置,同时将spring的配置文件appl

每日算法之二十六:Substring with Concatenation of All Words

变相的字符串匹配 给定一个字符串,然后再给定一组相同长度的单词列表,要求在字符串中查找满足以下条件的起始位置: 1)从这个位置开始包含单词列表中所有的单词,且每个单词仅且必须出现一次. 2)在出现的过程中不能出现其他的干扰单词. 3)出现的位置可能有多个. 4)单词的出现顺序不做要求. 下面是一个例子: S:"barfoothefoobarman" L:"foo","bar" 位置0是出现位置,:两个单词均出现仅出现一次,且没有干扰.同样位置9也