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 ...
随机推荐
- PHP ezmlm_hash() 函数
定义和用法 ezmlm_hash() 函数用于在 MySQL 数据库中保存 EZMLM 邮件列表的哈希值. 该函数接收一个 Email 地址参数,返回一个整数哈希值. 语法 int ezmlm_has ...
- 创建githup远程库并关联
第一种方法:远程new仓库时直接勾选初始化仓库,然后克隆到本地即可(注:本地对应层不可再初始化仓库git init).克隆下来的仓库已经与远程库建立了管理git removte 第二种方法:本地下面有 ...
- grid网格布局使用
定义 grid布局是指对网页进行划分成一个一个网格,然后根据自己的要求,可以任意组合. 以前写类似的功能,很麻烦,需要写很多的CSS去控制,有了grid就很方便了,可以随意进行组合. 跟flex有很多 ...
- 企业签名和TF签名哪个好?TF签名和企业签名怎么选?
很多开发者在App无法上架Appstore,需要内测或者开放给苹果用户使用的时候,需要选择企业签名来帮助自己的App开放下载链接,给苹果用户使用.苹果企业签名的类型有很多,TF签名最近又很火爆,那么企 ...
- OpenCV计算机视觉编程攻略(第三版)源码
去年买了这本OpenCV的书,感觉还不错,但是书上没有给出下载源码的地方,在网上找了下,还好找到了,现在分享给大家: 链接: https://pan.baidu.com/s/1IqAay1IZ8g-h ...
- “随手记”开发记录day01
今天进行了第二次团队会议,并且开始了“随手记”APP的开发. 今天,我们的完成了登陆.注册页面,开始完成记账部分页面和个人信息页面. 完成页面如下:
- Java集合最全解析,学集合,看这篇就够用了!!!
在看集合类之前, 我们要先明白一下概念: 1.数据结构 (1):线性表 [1]:顺序存储结构(也叫顺序表) 一个线性表是n个具有相同特性的数据元素的有限序列.数据元素是一个抽象的符号,其具体含义在不同 ...
- 在Linux系统中安装Tomcat详细教程
首先在官网下载jdk和Tomcat的压缩包 这里下载jdk-8u241-linux-x64 .tar.gz 和apache-tomcat-8.5.50.tar.gz 然后解压jdk压缩包 tar –z ...
- C - 一个C语言猜字游戏
下面是一个简陋的猜字游戏,玩了一会儿,发现自己打不过自己写的游戏,除非赢了就跑,最高分没有过1000. 说明:srand(time(NULL))和rand(),srand,time和rand都是函数, ...
- Java程序员面试必备:Volatile全方位解析
前言 volatile是Java程序员必备的基础,也是面试官非常喜欢问的一个话题,本文跟大家一起开启vlatile学习之旅,如果有不正确的地方,也麻烦大家指出哈,一起相互学习~ 1.volatile的 ...