前文回顾

本文档环境基于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++入门记-构造函数和析构函数的更多相关文章

  1. 《挑战30天C++入门极限》C++面向对象编程入门:构造函数与析构函数

        C++面向对象编程入门:构造函数与析构函数 请注意,这一节内容是c++的重点,要特别注意! 我们先说一下什么是构造函数. 上一个教程我们简单说了关于类的一些基本内容,对于类对象成员的初始化我们 ...

  2. .NET 基础 一步步 一幕幕[面向对象之构造函数、析构函数]

    构造函数.析构函数 构造函数: 语法: //无参的构造函数 [访问修饰符] 函数名() :函数名必须与类名相同. //有参的构造函数 [访问修饰符] 函数名(参数列表):函数名必须与类名相同. 作用: ...

  3. Java入门记(五):容器关系的梳理(下)——Map

    注意:阅读本文及相关源码时,需要数据结构相关知识,包括:哈希表.链表.红黑树. Map是将键(key)映射到值(value)的对象.不同的映射不能包含相同的键:每个键最多只能映射到一个值.下图是常见M ...

  4. 不可或缺 Windows Native (21) - C++: 继承, 组合, 派生类的构造函数和析构函数, 基类与派生类的转换, 子对象的实例化, 基类成员的隐藏(派生类成员覆盖基类成员)

    [源码下载] 不可或缺 Windows Native (21) - C++: 继承, 组合, 派生类的构造函数和析构函数, 基类与派生类的转换, 子对象的实例化, 基类成员的隐藏(派生类成员覆盖基类成 ...

  5. C++构造函数、析构函数与抛出异常

    [本文链接] http://www.cnblogs.com/hellogiser/p/constructor-destructor-exceptions.html [问题] 构造函数可以抛出异常么?析 ...

  6. python中的构造函数和析构函数

    python中的特殊方法,其中两个,构造函数和析构函数的作用: 比说“__init__”这个构造函数,具有初始化的作用,也就是当该类被实例化的时候就会执行该函数.那么我们就可以把要先初始化的属性放到这 ...

  7. 内存的分配VS回收&构造函数VS析构函数

    之前有一个问题一直困扰着我,就是一个变量出了作用域,我以为这个变量的内存就被回收了,其实不是这样的,昨天问了一个高手,才豁然开朗,自己在看相关代码的反汇编代码,才知道原来真是这样就.这个问题,我想简单 ...

  8. C++C++中构造函数与析构函数的调用顺序

    http://blog.csdn.net/xw13106209/article/details/6899370 1.参考文献 参考1: C++继承中构造函数.析构函数调用顺序及虚函数的动态绑定 参考2 ...

  9. php 的 构造函数 和 析构函数

    构造函数 在C++ java里的应用及其普遍,今天好好研究了一下 php 的 构造函数 和 析构函数 构造函数 和 析构函数 构造函数 void __construct ([ mixed $args ...

随机推荐

  1. 5.22 noip模拟赛

    本来我是不想写的,无奈不会写.蒟蒻 考场就是想不出来 今天得到了100分额外水过了100分我是真的失败.还有一个根本不会check 感觉自己非常之菜. 这道题是这样的 还行吧比较有意思 首先确立一个真 ...

  2. day9.关于文件的操作

    一.文件操作 """ fp = open("文件名",mode="模式",encoding="utf-8") ...

  3. 比PS还好用!Python 20行代码批量抠图

    你是否曾经想将某张照片中的人物抠出来,然后拼接到其他图片上去,从而可以即使你在天涯海角,我也可以到此一游? 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在 ...

  4. 解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)...

    在IDEA中将xxxMapper.xml文件创建在(src/main/java)目录中,运行报错:org.apache.ibatis.binding.BindingException: Invalid ...

  5. 常哥带你认识NoSQL和Redis的强大

    各位朋友,这篇文章是针对Redis快速了解的内容,为了学好Redis在这里首先跟大家聊聊NoSQL相关内容,有了概念和方向后,我们再学习Redis大家会感觉得心应手. [公众号dotNet工控上位机: ...

  6. The Involution Principle

    目录 Catalan Paths Vandermonde Determinant The Pfaffian Catalan Paths 从 \((0,0)\) 走到 \((n,n)\), 每次只能向上 ...

  7. SPM:Single-stage Multi-person Pose Machines

    figure1图b figure1 -a   figure3-a 图一-a

  8. JS学习第四天

    循环语句 while(){ }: while :先判断再执行,如果while的条件结果为false,那么执行语句块中代码一句都不走 do(){ }while; do   while:先执行代码块中的语 ...

  9. Scss 定义内层class的简单写法

    如果定义样式的时候,内层样式名称和外层保持一致的话可以简写如下 如果一个样式下有相关的其他样式可以使用 &-xxx 来简写, <template> <div class=&q ...

  10. Goland 生成可执行文件

    Goland通过调用go build 生成可执行文件. 默认Goland是可以执行程序,但你找不到可执行文件. 你需要自定义配置文件. 创建go build配置文件 Run kind 选Directo ...