王鹿其 发表于 2023-11-9 20:36:33

这个代码的生成结果是什么,为什么是这样的顺序和结果

#include<iostream >
using namespace std;
class person
{
        public:
        person()//无参构造,也称为默认构造
        {
                cout << "person的构造函数调用" << endl;
        }

        person(int a)//有参构造
        {
                int age = a;
                cout << "age is"<<a << endl;
        }

        ~person()
        {
                cout << "person的析构函数调用" << endl;
        }


        //拷贝构造函数
        person(const person& p)
        {
                int age=0;
                cout << "拷贝构造函数的调用" << endl;
               
        }
};

//调用默认构造函数的时候,不要用小括号。
//调用的方式
void test01()
{
        //括号法
        person p1(10);
        //显示法
        person p2 = person(10);
        //隐式转化法

}

int main()
{
        test01();
        return 0;
}

isdkz 发表于 2023-11-9 20:37:10

生成结果是:
person的构造函数调用
age is 10
person的析构函数调用
person的构造函数调用
age is 10
person的析构函数调用

原因是:
1. 首先,调用test01函数。
2. 在test01函数中,使用括号法创建了一个person对象p1,并传入参数10。这会调用有参构造函数,输出"age is 10"。
3. person对象p1的作用域结束,所以调用了析构函数,输出"person的析构函数调用"。
4. 然后,使用显示法创建了一个person对象p2,并传入参数10。这也会调用有参构造函数,输出"age is 10"。
5. person对象p2的作用域结束,所以调用了析构函数,输出"person的析构函数调用"。

因此,代码的生成结果是先输出"person的构造函数调用",然后输出"age is 10",最后输出"person的析构函数调用"。
页: [1]
查看完整版本: 这个代码的生成结果是什么,为什么是这样的顺序和结果