构造函数和析构函数:

定义:构造函数和析构函数,这两个函数会被编译器自动调用,完成对象初始化和清理工作。

区别:

构造函数:用于创建对象时我对象的成员属性赋值。他由编译器自动调用。

析构函数:用于对象销毁前系统自动调用。

构造函数语法:  类名 ( ) { }

1、构造函数,没有返回值也不写void;

2、函数名称和类名相同;

3、可以有参数,因此可以发生重载。

析构函数语法: ~类名 () { }

1、析构函数没有返回值也不写void;

2、函数名称与类名相同,在名称前加 ~;

3、不可以有参数,因此不可以发生重载。

构造和析构的顺序:

1、构造与虚构的顺序相反;

2、初始化成员变量默认是从上之下,与初始化列表无关

#include <iostream>
#include <string>
#include <string.h>
using namespace std;
class Student
{
public:
    Student()
    {
        m_name = new char[20];  //开辟
    }
    ~Student()
    {
        delete [] m_name;       //释放
    }
    /*** 默认提供浅拷贝 ****/
    /**** 问题:当出现指针成员的时候,想要类对象拥有独立空间 ****
     * 关于写操作的时候都要去动
     * 1.拷贝构造函数
     * 2.写函数
     * ****************************************************/
    Student(const Student &value);
    void setName(const char *name);
    char *name() const;
private:
    char *m_name;   //指针 -> 开辟空间
};
Student::Student(const Student &value)
{
    m_name = new char[20];  //开辟
    strcpy(m_name,value.m_name);
}
voi
d Student::setName(const char *name)
{
    if(m_name != NULL)
    {
        strncpy(m_name,name,20);
    }
}

char *Student::name() const
{
    return m_name;
}

int main()
{
    Student *stu1 = new Student;
    stu1->setName("张三");
    cout << "姓名1:" << stu1->name() << endl;

    Student stu2(*stu1);    //拷贝
    delete stu1;
    cout << "姓名2:" << stu2.name() << endl;
    return 0;
}

构造函数和析构函数的用法相关推荐

  1. php中的构造函数和析构函数,php 中构造函数和析构函数

    构造函数: 在对象实例化时被调用,一个类中只能有一个构造函数,在类中起初始化的作用. 析构函数: 在对象结束时被自动调用. 话不多说,用一段代码来说明两者的区别: //定义一个类 class Pers ...

  2. python在删除对象时会自动调用析构函数_Python面向对象程序设计构造函数和析构函数用法分析...

    本文实例讲述了Python面向对象程序设计构造函数和析构函数用法.分享给大家供大家参考,具体如下: 构造函数和析构函数 1.构造方法的使用 很多类都倾向于将对象创建为有初始化状态.因此类可以定义一个名 ...

  3. C++构造函数与析构函数

    几乎所有的面向对象的编程语言都保护构造函数与析构函数,好学者就要举手了,啥情况啊,Java里面不就没有析构函数嘛.好吧,你问倒我了,不过可以认为Java的垃圾自动回收机制实现了对象析构的功能.管他呢, ...

  4. C++将类的构造函数、析构函数声明为private或者protected的用途

    如果将构造函数.析构函数声明为private或者protected,表示不能从类的外部正常调用构造和析构函数了. 这种用法的通常使用的场景如下: 1.如果不想让外面的用户直接构造一个类A的对象,而希望 ...

  5. C++基础学习9:构造函数和析构函数

    1.  构造函数用来对类对象进行初始化,它完成对内存空间的申请.赋初值等工作.   2.  析构函数主要是用来做清理工作的. 补充: 函数名或变量名前面有"::"但是没有类名,说明 ...

  6. 【C++学习笔记2】构造函数、析构函数、函数多态、抽象类、函数模板

    这次笔记介绍构造函数.析构函数.函数多态.抽象类.函数模板 一.构造函数 1.在定义对象,构造函数程序将自动执行,他的类型跟类名一致 函数声明最好放在自己的类里面,这样才符合类的封装,也可以像下面一样 ...

  7. 构造函数 和 析构函数 能否抛出异常

    构造函数和析构函数分别管理对象的建立和释放,负责对象的诞生和死亡的过程.当一个对象诞生时,构造函数负责创建并初始化对象的内部环境,包括分配内存.创建内部对象和打开相关的外部资源,等等.而当对象死亡时, ...

  8. C++:构造函数,析构函数及友元函数

    我们先从一个题来开始:这是改正之后的样子. #include <iostream> using namespace std; class MyClass { public:MyClass( ...

  9. C++编程入门系列之十四(类与对象:构造函数和析构函数)

    C++编程入门系列之十四(类与对象:构造函数和析构函数) 鸡啄米上一节中给大家讲解了类的声明.成员的访问控制和对象,今天鸡啄米给大家讲C++编程入门时同样必须掌握的构造函数和析构函数.从上一讲开始已经 ...

最新文章

  1. 这段Python代码让程序员赚300W,公司已确认!网友:神操作!
  2. hbase或hadoop错误及解决方法
  3. 成功解决sklearn\cross_validation.py:41: DeprecationWarning: This module was deprecated in version 0.18 i
  4. hdu 2824 The Euler function
  5. Linux 操作系统启动流程以及trouble shooting
  6. javaCV开发详解之7:让音频转换更加简单,实现通用音频编码格式转换、重采样等音频参数的转换功能(以pcm16le编码的wav转mp3为例)...
  7. Hokuyo‘s first try
  8. java制作游戏开始界面,太香了
  9. springboot 微信支付接口(H5)
  10. USB chirp信号测试
  11. win10无法访问linux共享服务器,Win10无法访问NAS或Linux网络共享的处理方法
  12. 在Win10下安装Anaconda3,“开始”菜单目录下只有Anconda prompt怎么办
  13. 在“https://money.cnn.com/data/markets/nasdaq/”抓取纳斯达克成分股数据并将数据表存到一个Excel表格中。
  14. 想做网上线上引流怎么做?如何通过网络获取流量?
  15. android 重力感应view,Android重力感应示例
  16. java计算机毕业设计web智慧医疗平台设计与实现源码+mysql数据库+系统+lw文档+部署
  17. 手把手教你,把3D模型从stl格式导出iges格式的方法
  18. 普通摄像机之开源实时车牌识别实现
  19. 清剿流氓软件 八大绝技
  20. 蓝桥杯青少组 历年 真题题库

热门文章

  1. 小事记-- Pr 打开显示“不支持的视频驱动程序”
  2. Windows10原创知识
  3. 计算机ppt基础知识题库,计算机一级考试试题题库office(2)
  4. 【noip2017T3】列队----树状数组
  5. 调用 Dll 中的函数时,出现栈(STACK)的清除问题 - 故障模块名称: StackHash_0a9e
  6. #边学边记 必修4 高项:对事的管理 第4章 项目进度管理之估算活动资源
  7. 牛客寒假训练营6 阿宁睡不醒
  8. QVariant 初识
  9. 《七哥说道》第六章:不见雪的冬天,耐人寻味
  10. HDU之小小作者-----Mer de sause;