• 构造函数与析构函数


    构造函数:

            是一种特殊的成员函数,构造函数名与类名一样,没有返回值类型,也没有返回值,构造函数可以重载

            创建对象时初始化对象--为对象的成员变量赋初值

            在创建一个新对象时,系统会自动调用构造函数,如果没有显示给出构造函数,系统回自动给一个无参的构造函数。

            const在c语言中申明变量为只读不能直接修改的变量,在C++中申明一个常量

            不能在构造函数中赋值的可以使用成员初始化列表给数据成员赋值(实现构造函数时)

    1. class MyClass {
    2. public:
    3. //MyClass() {
    4. // cout << "构造函数 = " << endl;
    5. //}//内联函数
    6. MyClass();
    7. MyClass(int val);
    8. const string id;
    9. void setVal(int val);
    10. private:
    11. string nane;
    12. protected :
    13. };
    14. MyClass::MyClass() :id( "123") {
    15. cout << "构造函数 = " << id << endl;
    16. }
    17. MyClass::MyClass(int val):id("999") {
    18. cout << "构造函数 = " << id << endl;
    19. }
    20. void MyClass::setVal(int val) {
    21. cout << " vasl = " << val << endl;
    22. }
    23. int main()
    24. {
    25. MyClass obj;
    26. MyClass obj1(5);
    27. obj.setVal(9);
    28. MyClass *p1 = new MyClass;
    29. MyClass *p2 = new MyClass(5);
    30. return 0;
    31. }

    析构函数:

            是一种特殊的成员函数,主要作用是在对象生命周期结束时进行清理,系统可以自动调用调用析构函数

            函数名与类名相同,使用~。没有返回值类型和返回值,也没有参数,是公有属性

            没有写时,系统回自动给出默认的析构函数

            析构函数可以通过对象主动调用,在系统生命周期结束时,会自动调用析构函数

            不是调用析构函数导致对象生命周期结束,而是生命周期结束会自动调用析构函数

            先构造的后析构

    拷贝构造函数:(拷贝构造-函数)

            是一个特殊的构造函数,通过拷贝构造函数完成一个复制的过程。第一个参数是本类对象的引用,后面可以加参数列表

            先是构造函数,才可能是拷贝构造函数,可以使用系统默认,也可以自己定义

            调用时机:使用一个对象给另一个对象初始化,MyClass x3 = x;

                              使用一个对象构造另一个对象,MyClass x4 ( x);

                              函数的参数是类的对象

                              函数的返回值是类的对象

            深拷贝(自己声明了一块内存)与浅拷贝(默认拷贝)

            防止默认拷贝发生:写一个私有的拷贝构造函数,但不对他进行定义(主动让程序报错

    1. class MyClass
    2. {
    3. public:
    4. MyClass();
    5. MyClass(int val,string name);
    6. ~MyClass();
    7. MyClass(const MyClass& obj);
    8. MyClass(const MyClass& obj, int n, int m);
    9. public:
    10. int m;
    11. string str;
    12. private:
    13. };
    14. MyClass::MyClass()
    15. {
    16. m = 8797;
    17. str = "dsfhisdjfyhsd";
    18. cout << "无参构造函数 = " << m << "--------" << str << endl;
    19. }
    20. MyClass::MyClass(int val, string name):m(66),str("zh")
    21. {
    22. cout << "有参构造函数 = " << val << "--------" << name << "--------"<< m << "--------" << str << endl;
    23. }
    24. MyClass::~MyClass()
    25. {
    26. cout << "析造函数 = " << endl;
    27. }
    28. MyClass::MyClass(const MyClass& obj)
    29. {
    30. m = obj.m;
    31. str = obj.str;
    32. cout << "拷贝构造函数 = " << m <<"--------" << str << endl;
    33. }
    34. MyClass::MyClass(const MyClass& obj,int dsf,int dfgd)
    35. {
    36. m = obj.m;
    37. str = obj.str;
    38. cout << "拷贝构造函数 = " << m << "--------" << str<<"--------" << dsf<<"--------" << dfgd << endl;
    39. }
    40. void test1(MyClass obj) {
    41. }
    42. MyClass test2() {
    43. #if 0
    44. MyClass sdfg;
    45. return sdfg;
    46. #else
    47. return MyClass();
    48. #endif
    49. }
    50. MyClass x;
    51. MyClass x2(8888,"ddsfhksdh");
    52. cout << " --------------------- " << endl;
    53. MyClass x3 = x;//使用一个对象给另一个对象初始
    54. MyClass x4 ( x);//使用一个对象构造另一个对象
    55. MyClass x5(x,657,4355);
    56. test1(x2);// 函数的参数是类的对象
    57. test1(x);// 函数的参数是类的对象
    58. test2();//函数的返回值是类的对象
    59. MyClass dfhgf = test2();

            

  • 相关阅读:
    12个MySQL慢查询的原因分析
    type_traits元编程库学习
    MapReduce原理剖析(深入源码)
    连锁门店进销存软件的用途
    视频高效剪辑,批量调整视频速度,让视频更加精彩
    数据结构与算法之美笔记06(栈)
    卷积核、特征图可视化
    阿里云ack集群升级流程
    华为设备配置MSTP+VRRP组合组网
    社交网络分析的 R 基础:(六)绘图操作
  • 原文地址:https://blog.csdn.net/weixin_44840658/article/details/127956776