析构函数-复制构造函数-赋值操作符重载-默认构造函数<代码解析>
通过下面primer中的一道习题,可以更深刻的了解,析构函数,复制构造函数,赋值操作符重载,默认构造函数的使用。
但是我的结果与primer习题解答里面的并不相同,可能是编译器不同的原因导致。
// test1107.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <iostream>
#include <vector>
using namespace std; struct Exam{
Exam(){ cout<<"Exam()"<<endl;} //默认构造函数
Exam(const Exam&){ cout<<"Exam(const Exam&)"<<endl;} //复制构造函数
Exam& operator= (const Exam&){ cout<<"Exam& operator"<<endl;return *this;} //赋值操作符
~Exam(){ cout<<"~Exam()"<<endl;}//析构函数
}; void func1(Exam a){}//形参为 exam的对象
void func2(Exam& b){}//形参为 exam的引用
Exam func3(){Exam obj;return obj;} //返回exam的对象 int main(){
cout<<"--------------------1----------------"<<endl;
Exam a; //调用默认的构造函数创建对象a
cout<<"--------------------2----------------"<<endl;
func1(a);// 调用复制构造函数,创建副本传递实参,撤销副本
cout<<"--------------------3----------------"<<endl;
func2(a); //形参为引用,无需传递实参
cout<<"--------------------4----------------"<<endl;
a = func3(); //调用默认构造函数创建局部对象,
//用复制构造函数返回对象副本
//调用析构函数撤销局部对象
//调用赋值函数赋值
//调用析构函数撤销副本
cout<<"--------------------5----------------"<<endl;
Exam *b = new Exam(); //调用默认构造函数创建对象
cout<<"--------------------6----------------"<<endl;
vector<Exam> exec(); //调用默认构造函数创建对象
//调用赋值构造函数将临时对象复制到每个元素
//调用析构函数撤销 //重复三次
cout<<"--------------------7----------------"<<endl;
delete b; //调用析构,撤销p
cout<<"--------------------8----------------"<<endl;
system("pause");
}
执行结果如下:
析构函数-复制构造函数-赋值操作符重载-默认构造函数<代码解析>的更多相关文章
- C++中的赋值操作符重载和拷贝构造函数
1,关于赋值的疑问: 1,什么时候需要重载赋值操作符? 2,编译器是否提供默认的赋值操作符? 2,关于赋值的疑问: 1,编译器为每个类默认重载了赋值操作符: 1,意味着同类型的类对象可以相互赋值: 2 ...
- C#构造函数、操作符重载以及自定义类型转换
构造器 构造器(构造函数)是将类型的实例初始化的特殊方法.构造器可分为实例构造器和类型构造器,本节将详细介绍有关内容. 实例构造器 顾名思义,实例构造器的作用就是对类型的实例进行初始化.如果类没有显示 ...
- C++中关于重载默认构造函数与默认全部参数的构造函数的使用注意
# include<iostream>using namespace std;class Time{public: //公用成员函数 ...
- C++学习笔记16,C++11中的显式的默认构造函数以及显示删除默认构造函数
在早期的C++中.假设须要一些接受一些參数的构造函数,同一时候须要一个不接收不论什么參数的默认构造函数.就必须显示地编写空的默认构造函数.比如: //tc.h class A{ private: in ...
- C++编译器会对没有构造函数的类生成默认构造函数吗?(有必要的时候才生成,要看情况。有反汇编验证)
之前在上C++的课的时候,印象中有那么一句话:如果一个类没有任何构造函数,那么编译器会生成一个默认的构造函数 今天在看<深度探索C++对象模型>的第二章:“构造函数语意学”的时候发现之前听 ...
- C++在单继承、多继承、虚继承时,构造函数、复制构造函数、赋值操作符、析构函数的执行顺序和执行内容
一.本文目的与说明 1. 本文目的:理清在各种继承时,构造函数.复制构造函数.赋值操作符.析构函数的执行顺序和执行内容. 2. 说明:虽然复制构造函数属于构造函数的一种,有共同的地方,但是也具有一定的 ...
- 赋值操作符、复制构造函数、析构函数、static成员练习
/** * 定义一个Employee类,包含雇员名字和一个唯一的雇员标识,为该类定义默认构造函数和参数为表示 * 雇员名字的string构造函数.如果该类需要复制构造函数或赋值操作符,实现这些函数 * ...
- C++11六大函数(构造函数,移动构造函数,移动赋值操作符,复制构造函数,赋值操作符,析构函数)
在C++中,有三大函数复制控制(复制构造函数,赋值操作符,析构函数),而在C++11中,加入了移动构造函数,移动赋值操作符.我就斗胆将他们命名为六大函数好了. 一.构造函数 c++primer中说过: ...
- C++中:默认构造函数、析构函数、拷贝构造函数和赋值函数——转
对于一个空类,编译器默认产生4个成员函数:默认构造函数.析构函数.拷贝构造函数和赋值函数.1.构造函数:构造函数是一种特殊的类成员,是当创建一个类的时候,它被调用来对类的数据成员进行初始化和分配内存. ...
随机推荐
- 1104 Sum of Number Segments
题意: 给出n个不大于1.0的小数序列,如{ 0.1, 0.2, 0.3, 0.4 },则共有10个分片(0.1) (0.1, 0.2) (0.1, 0.2, 0.3) (0.1, 0.2, 0.3, ...
- Celery-4.1 用户指南: Calling Tasks(调用任务)
基础 本文档描述 Celery 中任务实例和 Canvas 使用的统一 “Calling API”. API 中定义了一个执行选项的标准集,以及三个方法: - apply_async(args[, k ...
- 读取XML文件的指定节点的值 并转换为Item
cmb_State_Send.ItemsSource = null; XmlDocument doc = new XmlDocument(); doc.Load("D:\\模板\\Works ...
- windows异常演示,指定异常类型,然后生成异常
#include "stdafx.h"#include <Windows.h>#include <float.h> DWORD Filter (LPEXCE ...
- object类型对象 ref参数如何理解?
class Program { static void Main(string[] args) { Student stu = new Student { Name = "老王" ...
- css样式文件命名规范
样式文件命名规范 主要 master.css, style.css, main.css 布局 layout.css 专栏 columns.css 文字 font.css 打印 print.css 主题 ...
- day17 11.JdbcUtils工具抽取
连接数据库的四个必要条件:driverclass.url.username.password. package cn.itcast.utils; import java.sql.Connection; ...
- gym - 101673I Twenty Four, Again (表达式树枚举)
题意及思路 模拟场上用一般方法枚举非常麻烦,一个小时没写出来,还是自己太菜了...用表达式树枚举有一个好处,判断需不需要加括号非常方便,只有当前节点运算符的优先级高于子节点的时候,才需要给子节点加一个 ...
- echarts柱状图每个柱子显示不同颜色,并且能够实现点击每种颜色影藏对应柱子的功能
---------------------------------------------------------代码区---------------------------------------- ...
- hibernate里的实体类中不能重写toString
@Test报堆栈溢出, 在main中报错toString