c++ 入门——浅析构造函数和析构函数分享

—-想了解c++ 入门——浅析构造函数和析构函数分享的全部内容且更多的C语言教程关注<计算机技术网(www.ctvol.com)!!>

前文回顾

c++ 入门——浅析构造函数和析构函数分享档环境基于Vscode + GCC + CodeRunner

关于C++的环境搭建请参考下面链接:

https://www.jb51.net/article/186542.htm

由于本人具有C#开发经验,部分相同的知识就不再赘述了。只列一下需要记录的知识。

HelloWorld

cout 代表输出<<

cin 代表输入 >>

endl;代表换行,清空缓冲区。

  #include <iostream>  int main()  {   std::cout << "Helloworld22222222222!" << std::endl;   return 0;  }

RunCode结果如下:

PS E:LearchCTestOne> cd “e:LearchCTestOne” ; 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

构造函数和析构函数

每当创建对象时,需要添加初始化代码时,则需要定义自己的构造函数;而对象撤销时,需要自己添加清理工作的代码时,则需要定义自己的析构函数。

按参数类型

  #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构造函数初始化匿名对象;

调用默认函数不能加();

调用规则

默认情况下,C++编译器至少给一个类添加三个函数
1.默认构造函数(无参)
2.默认析构函数
3.默认拷贝构造函数,对属性进行值拷贝

构造函数调用规则如下:

总结

第三种隐式转换法,我看的有点头晕,写法太多。java和C#在构造函数这块调用方法做了简化,只能用new来创建对象。

正所谓:华山自古一条道,好好的走吧!

以上就是c++ 入门——浅析构造函数和析构函数的详细内容,更多关于c++ 构造函数和析构函数的资料请关注<计算机技术网(www.ctvol.com)!!>其它相关文章!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/487629.html

(0)
上一篇 2020年11月12日
下一篇 2020年11月12日

精彩推荐