• 对象做函数参数和函数返回值时,调用复制构造函数,构造函数,析构函数的情况



    // 对象做函数参数和返回值.cpp : 定义控制台应用程序的入口点。
    //exit(0)表示正常退出程序,exit(0)表示异常退出

    //在调用input时,编译器用对象A去创建了形参对象temp,调用了复制构造函数,对象A中的数据复制给了对象temp
    // 在input函数中,执行temp.set(s),为对象temp中数据成员str申请了动态储存空间,并设置了输入的字符串
    //并没有改变实参A中的数据成员str的储存空间,故在执行语句A.show()后输出的字符串并没有改变。在函数调用结束后
    //将对象temp做为函数返回值来创建对象B,所以对象B的数据成员str的值是调用input函数时输入的字符串

    #include<iostream>
    #include<cstring>
    using namespace std;
    class Cstream
    {
    public:
    Cstream(char *s);
    Cstream(const Cstream& temp);//copy constructor function
    ~Cstream();
    void show();
    void set(char *s);
    private:
    char *str;
    };

    Cstream::Cstream(char * s)
    {
    cout << "constructor" << endl;
    str = new char[strlen(s) + 1];
    if (!str)
    {
    cerr << "Allocation Error" << endl;
    exit(1);//error 退出程序
    }
    strcpy(str, s);
    }

    Cstream::Cstream(const Cstream & temp)
    {
    cout << "copy constructor" << endl;
    str = new char[strlen(temp.str) + 1];
    if (!str)
    {
    cerr << "error in apply new space" << endl;
    exit(1);
    }
    strcpy(str,temp.str);
    }

    Cstream::~Cstream()
    {
    cout << "destructor" << endl;
    if (str != NULL)
    delete[] str;//释放str指向的储存空间
    }

    void Cstream::show()
    {
    cout << str << endl;
    }

    void Cstream::set(char * s)
    {
    delete[] str;
    str = new char[strlen(s) + 1];
    if (!str)
    {
    cerr << "Allocation Error" << endl;
    exit(1);
    }
    strcpy(str, s);
    }
    Cstream input(Cstream temp)//对象作为参数和返回值的普通函数
    {
    char s[20];
    cout << "please input the string:";
    cin >> s;//输入新字符串
    temp.set(s);//赋值新字符串
    return temp;//返回对象
    }
    int main()
    {
    Cstream A("Hello");
    A.show();
    Cstream B = input(A);//用input的函数值初始化对象B
    A.show();
    B.show();
    return 0;
    }

    图像 2

  • 相关阅读:
    npm install遇到的问题
    已经安装了node和npm,输入node -v 未找到命令
    虚拟机VMware搭建代码环境
    使用VMware出现的各种问题
    bind、delegate、on的区别
    软件设计原则
    Qt 模型/视图/委托
    UML类图与类间六种关系表示
    C++内存分配与释放
    SQLite 自定义函数,聚合,排序规则
  • 原文地址:https://www.cnblogs.com/summercloud/p/5529491.html
Copyright © 2020-2023  润新知