C++入门记-构造函数和析构函数
前文回顾
本文档环境基于Vscode + GCC + CodeRunner
关于C++的环境搭建请参考下面链接:
C++入门记-大纲
由于本人具有C#开发经验,部分相同的知识就不再赘述了。只列一下需要记录的知识。
HelloWorld
cout 代表输出<<
cin 代表输入 >>
endl;代表换行,清空缓冲区。
#include <iostream>
int main()
{
std::cout << "Helloworld22222222222!" << std::endl;
return 0;
}
RunCode结果如下:
PS E:\LearchC\TestOne> cd "e:\LearchC\TestOne\" ; if ($?) { g++ -fexec-charset=GBK -std=c++11 1-HelloWord.cpp -o a.exe } ; if ($?) { ./a.exe }
Helloworld22222222222!
使用命名空间
#include <iostream>
using namespace std;
int main()
{
cout << "请输入一个数字!" << endl;
int a;
cin >> a;
cout << "你输入的是" << a << endl;
return 0;
}
RunCode结果如下:
请输入一个数字!
2
你输入的是2
类和对象之构造和析构函数
按参数类型
无参构造函数
有参构造函数
copy构造函数
#include <iostream>
using namespace std;
class Person
{
public:
int _a;
public:
//无参构造函数
Person()
{
cout << "Person 构造函数的调用" << endl;
}
//有参构造函数
Person(int a)
{
_a = a;
cout << "Person构造函数A:" << a << endl;
}
Person(const Person &p)
{
_a = p._a;
cout << "PersonCopay构造函数_a:" << _a << endl;
}
//析构构造函数
~Person()
{
cout << "Person 析构函数的调用" << endl;
}
};
void test(){
Person p1;
}
int main(){
test();
system("pause");
return 0;
}
RunCode结果如下:
test方法结束后,会调用析构函数。
Person 构造函数的调用
Person 析构函数的调用
改变调用方式,在main里调用,将只出现调用构造函数,因为main函数后面pause暂停,不会释放Person的析构。
int main(){
Person p1;
system("pause");
return 0;
}
RunCode 结果如下
Person 构造函数的调用
按调用方式
括号法
显示调用
隐式调用
void test01()
{
//括号法
// Person p1; //默认
// Person p2(2); //有参
// Person p3(p2); //copy构造函数
// cout << "p2的age:" << p2._a << endl;
// cout << "p3的age:" << p3._a << endl;
//调用默认函数不能加()
//因为下面这行代码编译器会认为是函数的声明,不会创建对象
//Person p4();
//显示法
// Person p1;
// Person p2 = Person(10);
// Person p3 = Person(p2);
// Person(10); //匿名对象,这行执行完毕,立即释放
//注意事项2:不要用copy构造函数初始化匿名对象,编译器会认为Person (p3)==Person p3;
//Person(p3);
//cout << "P2-Age:" << p3._a << endl;
//隐式转换法
Person p1 = 10; //相当于写了Person p1=Person(10)
Person p2 = p1; //相当于copy构造
}
注意事项:
不要用copy构造函数初始化匿名对象;
调用默认函数不能加();
总结
第三种隐式转换法,我看的有点头晕,写法太多。java和C#在构造函数这块调用方法做了简化,只能用new来创建对象。
正所谓:华山自古一条道,好好的走吧!
C++入门记-构造函数和析构函数的更多相关文章
- 《挑战30天C++入门极限》C++面向对象编程入门:构造函数与析构函数
C++面向对象编程入门:构造函数与析构函数 请注意,这一节内容是c++的重点,要特别注意! 我们先说一下什么是构造函数. 上一个教程我们简单说了关于类的一些基本内容,对于类对象成员的初始化我们 ...
- .NET 基础 一步步 一幕幕[面向对象之构造函数、析构函数]
构造函数.析构函数 构造函数: 语法: //无参的构造函数 [访问修饰符] 函数名() :函数名必须与类名相同. //有参的构造函数 [访问修饰符] 函数名(参数列表):函数名必须与类名相同. 作用: ...
- Java入门记(五):容器关系的梳理(下)——Map
注意:阅读本文及相关源码时,需要数据结构相关知识,包括:哈希表.链表.红黑树. Map是将键(key)映射到值(value)的对象.不同的映射不能包含相同的键:每个键最多只能映射到一个值.下图是常见M ...
- 不可或缺 Windows Native (21) - C++: 继承, 组合, 派生类的构造函数和析构函数, 基类与派生类的转换, 子对象的实例化, 基类成员的隐藏(派生类成员覆盖基类成员)
[源码下载] 不可或缺 Windows Native (21) - C++: 继承, 组合, 派生类的构造函数和析构函数, 基类与派生类的转换, 子对象的实例化, 基类成员的隐藏(派生类成员覆盖基类成 ...
- C++构造函数、析构函数与抛出异常
[本文链接] http://www.cnblogs.com/hellogiser/p/constructor-destructor-exceptions.html [问题] 构造函数可以抛出异常么?析 ...
- python中的构造函数和析构函数
python中的特殊方法,其中两个,构造函数和析构函数的作用: 比说“__init__”这个构造函数,具有初始化的作用,也就是当该类被实例化的时候就会执行该函数.那么我们就可以把要先初始化的属性放到这 ...
- 内存的分配VS回收&构造函数VS析构函数
之前有一个问题一直困扰着我,就是一个变量出了作用域,我以为这个变量的内存就被回收了,其实不是这样的,昨天问了一个高手,才豁然开朗,自己在看相关代码的反汇编代码,才知道原来真是这样就.这个问题,我想简单 ...
- C++C++中构造函数与析构函数的调用顺序
http://blog.csdn.net/xw13106209/article/details/6899370 1.参考文献 参考1: C++继承中构造函数.析构函数调用顺序及虚函数的动态绑定 参考2 ...
- php 的 构造函数 和 析构函数
构造函数 在C++ java里的应用及其普遍,今天好好研究了一下 php 的 构造函数 和 析构函数 构造函数 和 析构函数 构造函数 void __construct ([ mixed $args ...
随机推荐
- C/C++编程笔记:C语言打造中国象棋游戏,项目源代码分享!
中国象棋是起源于中国的一种棋,属于二人对抗性游戏的一种,在中国有着悠久的历史.由于用具简单,趣味性强,成为流行极为广泛的棋艺活动. 它是中国棋文化,也是中华民族的文化瑰宝,它源远流长,趣味浓厚,基本规 ...
- 2020牛客暑期多校训练营 第二场 C Cover the Tree 构造 贪心
LINK:Cover the Tree 最受挫的是这道题,以为很简单 当时什么都想不清楚. 先胡了一个树的直径乱搞的贪心 一直过不去.后来意识到这类似于最经典长链剖分优化贪心的做法 然后那个是求最大值 ...
- 牛客挑战赛40 VMware和基站 set 二分 启发式合并 区间覆盖
LINK:VMware和基站 一道 做法并不常见的题目 看起来很难写 其实set维护线段就可以解决了. 容易想到 第二个操作借用启发式合并可以得到一个很不错的复杂度 不过利用线段树维护这个东西 在区间 ...
- CPU监控 线段树裸题
LINK:bzoj3064 此题甚好码了20min停下来思考的时候才发现不对的地方有点坑... 还真不好写来着 可这的确是线段树的裸题...我觉得我写应该没有什么大问题 不过思路非常的紊乱 如果是自己 ...
- 解Bug之路-Nginx 502 Bad Gateway
解Bug之路-Nginx 502 Bad Gateway 前言 事实证明,读过Linux内核源码确实有很大的好处,尤其在处理问题的时刻.当你看到报错的那一瞬间,就能把现象/原因/以及解决方案一股脑的在 ...
- LeetCode刷题时引发的思考:Java中ArrayList存放的是值还是引用?
好好学习,天天向上 本文已收录至我的Github仓库DayDayUP:github.com/RobodLee/DayDayUP,欢迎Star,更多文章请前往:目录导航 前言 今天我在刷LeetCode ...
- 部署Python应用
目录 安装Python 3.7.5 部署文件 安装Python 3.7.5 CentOS默认安装的是2.7.5版本的python [root@iZuf6e3zah39uzoj5pg1myZ ~]# p ...
- WebService简单Demo
看了网上好多关于webservice的例子,基本上对初学者来说都是模棱两可云里雾里,现在,我将网上关于webservice的讲解提炼出来,通过一个最简单使用并且方便的例子,告诉大家什么是webserv ...
- Spring IOC 剖析
模拟实现 Spring Ioc 控制反转功能 使用 => 原理 => 源码 => 模拟实现 使用:了解 原理:熟悉 源码 And 模拟实现: 精通 对照 Spring 功能点 Spr ...
- MyBatisPlus分页查询,删除操作
分页查询 分页查询在网页使用十分之多 原始的limit进行分页 pageHelper第三方插件 3. MP内置的分页插件 导入配置 如何使用,官网的代码如下 //分页插件 @Bean public P ...