构造函数和析构函数的用法
构造函数和析构函数:
定义:构造函数和析构函数,这两个函数会被编译器自动调用,完成对象初始化和清理工作。
区别:
构造函数:用于创建对象时我对象的成员属性赋值。他由编译器自动调用。
析构函数:用于对象销毁前系统自动调用。
构造函数语法: 类名 ( ) { }
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;
}
构造函数和析构函数的用法相关推荐
- php中的构造函数和析构函数,php 中构造函数和析构函数
构造函数: 在对象实例化时被调用,一个类中只能有一个构造函数,在类中起初始化的作用. 析构函数: 在对象结束时被自动调用. 话不多说,用一段代码来说明两者的区别: //定义一个类 class Pers ...
- python在删除对象时会自动调用析构函数_Python面向对象程序设计构造函数和析构函数用法分析...
本文实例讲述了Python面向对象程序设计构造函数和析构函数用法.分享给大家供大家参考,具体如下: 构造函数和析构函数 1.构造方法的使用 很多类都倾向于将对象创建为有初始化状态.因此类可以定义一个名 ...
- C++构造函数与析构函数
几乎所有的面向对象的编程语言都保护构造函数与析构函数,好学者就要举手了,啥情况啊,Java里面不就没有析构函数嘛.好吧,你问倒我了,不过可以认为Java的垃圾自动回收机制实现了对象析构的功能.管他呢, ...
- C++将类的构造函数、析构函数声明为private或者protected的用途
如果将构造函数.析构函数声明为private或者protected,表示不能从类的外部正常调用构造和析构函数了. 这种用法的通常使用的场景如下: 1.如果不想让外面的用户直接构造一个类A的对象,而希望 ...
- C++基础学习9:构造函数和析构函数
1. 构造函数用来对类对象进行初始化,它完成对内存空间的申请.赋初值等工作. 2. 析构函数主要是用来做清理工作的. 补充: 函数名或变量名前面有"::"但是没有类名,说明 ...
- 【C++学习笔记2】构造函数、析构函数、函数多态、抽象类、函数模板
这次笔记介绍构造函数.析构函数.函数多态.抽象类.函数模板 一.构造函数 1.在定义对象,构造函数程序将自动执行,他的类型跟类名一致 函数声明最好放在自己的类里面,这样才符合类的封装,也可以像下面一样 ...
- 构造函数 和 析构函数 能否抛出异常
构造函数和析构函数分别管理对象的建立和释放,负责对象的诞生和死亡的过程.当一个对象诞生时,构造函数负责创建并初始化对象的内部环境,包括分配内存.创建内部对象和打开相关的外部资源,等等.而当对象死亡时, ...
- C++:构造函数,析构函数及友元函数
我们先从一个题来开始:这是改正之后的样子. #include <iostream> using namespace std; class MyClass { public:MyClass( ...
- C++编程入门系列之十四(类与对象:构造函数和析构函数)
C++编程入门系列之十四(类与对象:构造函数和析构函数) 鸡啄米上一节中给大家讲解了类的声明.成员的访问控制和对象,今天鸡啄米给大家讲C++编程入门时同样必须掌握的构造函数和析构函数.从上一讲开始已经 ...
最新文章
- 这段Python代码让程序员赚300W,公司已确认!网友:神操作!
- hbase或hadoop错误及解决方法
- 成功解决sklearn\cross_validation.py:41: DeprecationWarning: This module was deprecated in version 0.18 i
- hdu 2824 The Euler function
- Linux 操作系统启动流程以及trouble shooting
- javaCV开发详解之7:让音频转换更加简单,实现通用音频编码格式转换、重采样等音频参数的转换功能(以pcm16le编码的wav转mp3为例)...
- Hokuyo‘s first try
- java制作游戏开始界面,太香了
- springboot 微信支付接口(H5)
- USB chirp信号测试
- win10无法访问linux共享服务器,Win10无法访问NAS或Linux网络共享的处理方法
- 在Win10下安装Anaconda3,“开始”菜单目录下只有Anconda prompt怎么办
- 在“https://money.cnn.com/data/markets/nasdaq/”抓取纳斯达克成分股数据并将数据表存到一个Excel表格中。
- 想做网上线上引流怎么做?如何通过网络获取流量?
- android 重力感应view,Android重力感应示例
- java计算机毕业设计web智慧医疗平台设计与实现源码+mysql数据库+系统+lw文档+部署
- 手把手教你,把3D模型从stl格式导出iges格式的方法
- 普通摄像机之开源实时车牌识别实现
- 清剿流氓软件 八大绝技
- 蓝桥杯青少组 历年 真题题库
热门文章
- 小事记-- Pr 打开显示“不支持的视频驱动程序”
- Windows10原创知识
- 计算机ppt基础知识题库,计算机一级考试试题题库office(2)
- 【noip2017T3】列队----树状数组
- 调用 Dll 中的函数时,出现栈(STACK)的清除问题 - 故障模块名称: StackHash_0a9e
- #边学边记 必修4 高项:对事的管理 第4章 项目进度管理之估算活动资源
- 牛客寒假训练营6 阿宁睡不醒
- QVariant 初识
- 《七哥说道》第六章:不见雪的冬天,耐人寻味
- HDU之小小作者-----Mer de sause;