编译器会默认的添加构造函数和析构函数操作

系统默认会提供默认构造,拷贝构造,析构函数

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;class Person
{public://构造和析构函数必须写在public下才能调用//构造函数,与类名相同,没有返回值 ,不写void,可以重载//构造函数由编译器自动调用,而不是手动,而且只会调用一次Person()//系统会默认写一个Person(){}的没有内容的无参构造{cout << "构造函数" << endl;}Person(int a)//如果有参函数,则系统不会再提供默认构造函数{cout << "构造函数(int a)" << endl;}//拷贝构造函数,系统默认会提供.如果手动了拷贝构造函数,则系统不会再提供无参和有参构造函数Person(const Person& p)//const的作用是不能修改传入的对象的值,&是引用,如果没有则是不停的开辟新对象,{Age = p.Age;cout << "拷贝构造函数调用" << endl;}// 析构函数,与类名相同,类名前面加一个符号 “~”,无返回值 ,不写void,无参//自动调用,只会调用一次~Person()//系统会默认写一个~Person(){}的没有内容的无参析构{cout << "析构函数" << endl;}int Age;
};void test()
{Person p1(1); //当创建实例时调用构造函数,当函数结束,实例消失时调用析构函数
}void test()
{//隐式调用//Person p1(1); //有参调用//p1.m_Age = 10;//Person p2(p1); //有参拷贝调用//Person p3; //无参调用不要加()   Person p3(); //编译器认为这行是函数的声明//显式法调用//Person p4 = Person(100);//右边的是匿名对象//Person p5 = Person(p4);//Person(100); //匿名对象编译器会自动释放//不能用拷贝构造函数 初始化匿名对象//Person p6 = Person(p5); //如果只写右边的部分,编译器认为你写成 Person p5Person p7 = 100; //相当于调用了 Person p7 = Person(100) ,隐式类型转换Person p8 = p7; // 相当于  Person p8 = Person(p7);int main(){test();system("pause");return EXIT_SUCCESS;
}

用列表语法初始化构造函数

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;class Person
{public://无参构造初始化,输入默认值Person() :m_A(10), m_B(20), m_C(30){}// 构造函数后面  +  : 属性(参数), 属性(参数)...Person(int a, int b, int c) : m_A(a), m_B(b), m_C(c){}int m_A;int m_B;int m_C;
};
void test()
{Person p1(10, 20, 30);cout << "p1的m_A :" << p1.m_A << endl;cout << "p1的m_B :" << p1.m_B << endl;cout << "p1的m_C :" << p1.m_C << endl;Person p2;cout << "p2的m_A :" << p2.m_A << endl;cout << "p2的m_B :" << p2.m_B << endl;cout << "p2的m_C :" << p2.m_C << endl;}int main() {test();system("pause");return EXIT_SUCCESS;
}

当类对象作为类的成员时候,构造顺序是先构造类对象的构造,然后构造自己,析构顺序与构造相反

explicit关键字用来防止隐式转换
Person p7 = 100; //相当于调用了 Person p7 = Person(100) ,隐式类型转换

C++ 构造函数和析构函数相关推荐

  1. C++ 笔记(17)— 类和对象(构造函数、析构函数、拷贝构造函数)

    1. 构造函数 构造函数是一种特殊的函数(方法),在根据类创建对象时被调用.构造函数是一种随着对象创建而自动被调用的函数,它的主要用途是为对象作初始化. 构造函数的名称与类的名称是完全相同的,并且不会 ...

  2. php构造和析构方法,php5构造函数与析构函数实例

    自php5起,有了构造函数与析构函数. 这使得php更富有面向对象的魅力了. 在php4时,构造函数用的是与类同名的函数来进行构造这个动作. 例如: 复制代码 代码示例: /* * myclass.p ...

  3. 提高C++性能的编程技术笔记:构造函数和析构函数+测试代码

    对象的创建和销毁往往会造成性能的损失.在继承层次中,对象的创建将引起其先辈的创建.对象的销毁也是如此.其次,对象相关的开销与对象本身的派生链的长度和复杂性相关.所创建的对象(以及其后销毁的对象)的数量 ...

  4. c++, 派生类的构造函数和析构函数 , [ 以及operator=不能被继承 or Not的探讨]

    说明:文章中关于operator=实现的示例,从语法上是对的,但逻辑和习惯上都是错误的. 参见另一篇专门探究operator=的文章:<c++,operator=>http://www.c ...

  5. C++中的构造函数VS析构函数

    1.构造函数 类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行.构造函数的名称与类的名称的完全相同的,并且不会返回任何数据类型,也不会返回void.构造函数用于为某些成员变量设置初 ...

  6. 多继承的构造函数和析构函数

    //程序2:多继承的构造函数 与 析构函数 #include<iostream> using namespace std;class A { public: A() { cout<& ...

  7. c++ 构造函数析构函数 数据安全_C++知识点 16:构造函数和析构函数的语法

    #define _CRT_SECURE_NO_WARNINGS #include using namespace std;// 创建一个类( 类内包括: 2个构造函数,一个析构函数) class Pe ...

  8. 多重继承的构造函数和析构函数

    多重继承的构造函数和析构函数的执行顺序: //此处不做注释和说明了,看程序能读懂的 #include <iostream> using namespace std; class base1 ...

  9. C++中构造函数和析构函数

    [注]致力于将知识讲明白!不懂请留言! 构造函数 定义 它是一种特殊的方法.主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中. 另外,一个类可以有 ...

  10. c++ map 析构函数_C++学习刷题6--C++类的使用:构造函数、析构函数和类的使用

    一.前言 本部分为C++语言刷题系列中的第4节,主要讲解这几个知识点:构造函数.析构函数和类的使用.欢迎大家提出意见.指出错误或提供更好的题目! 二.知识点讲解 由以前知识可知,类的实现中包含成员变量 ...

最新文章

  1. LTE SIB1时频资源
  2. 封闭不能外出怎么办?阳台派对了解下!
  3. 破解世界性技术难题! GTS让分布式事务简单高效
  4. Spring Framework Reference Documentation手册官网下载地址
  5. 推荐几个Linux命令行下性能监控小工具
  6. Eclipse安装从dao层直接到mapper层的插件
  7. FreeSql与SqlSugar性能测试对比
  8. WINDOW下,node.js的安装
  9. StringUtils工具类说明
  10. 列表推导式三种模式和生成器
  11. 大数据_MapperReduce_协处理器_类似Mysql的触发器---Hbase工作笔记0024
  12. Script的加载方法小结
  13. 如何基于列值从DataFrame中选择行?
  14. gstreamer向appsrc发送数据的代码
  15. LaTeX实战经验:如何插入程序代码
  16. 基于单片机的功放protues_基于单片机的音乐播放器设计
  17. 微信小程序-服务通知的订阅与下发(基于云调用)
  18. 信息系统项目管理师考试大纲(第2版)
  19. MySQL 排序 输出序号
  20. 在苹果Mac上怎样更改AirDrop名称?

热门文章

  1. linux c 程序崩溃日志,C:Linux:调用write()时TCP / IP程序崩溃
  2. Python+turtle绘制虚线同心圆
  3. Python监视电子邮箱并提示收到新邮件
  4. Python中一定要注意的那些“坑”(三)
  5. Python可以这样学(第一季:Python内功修炼)-董付国-专题视频课程
  6. 设计模式 C++简单工厂模式
  7. 2020各大网站rss订阅源地址_2020-20-18——DJANGO复习
  8. java 页面传值_java-jsp springmvc-controller 传值到页面的方法
  9. python界面编程 plc_在python gui编程怎么运行
  10. C语言之文件读写探究(三):fputs、fgets、feof(一次读写一行字符(文本操作))