c++类和对象练习--奇怪的类复制

此题的目的在于让我们深刻的理解c++中的  隐式类型转换;

006:奇怪的类复制

总时间限制: 
1000ms
内存限制: 
65536kB
描述

程序填空,使其输出9 22 5

#include <iostream>
using namespace std;
class Sample {
public:
	int v;
// 在此处补充你的代码
};
void PrintAndDouble(Sample o)
{
	cout << o.v;
	cout << endl;
}
int main()
{
	Sample a(5);
	Sample b = a;
	PrintAndDouble(b);
	Sample c = 20;
	PrintAndDouble(c);
	Sample d;
	d = a;
	cout << d.v;
	return 0;
}
输入无输出9
22
5样例输入
None
样例输出
9
22
5
#include <iostream>
using namespace std;

class Sample
{
        public:
                int v;
        //      在此处补充你的代码
        Sample(const Sample& a)
        {
                v = a.v+2;
        }

        Sample(int a=0)
        {
                 v = a;
        }
};

void PrintAndDouble(Sample o)
{

        cout << o.v;
        cout << endl;
}

int main()
{

        Sample a(5);
        Sample b = a;
        PrintAndDouble(b);
        Sample c = 20;
        PrintAndDouble(c);
        Sample d;
        d = a;
        cout << d.v;
        return 0;
}









#include <iostream>
using namespace std;

class Sample
{
        public:
                int v;
        //      在此处补充你的代码
        Sample(const Sample& a)
        {
                v = a.v+2;
        }

        Sample(int a=0)
        {
                 v = a;
        }
};

void PrintAndDouble(Sample o)
{
        cout << o.v;
        cout << endl;
}

int main()
{

        Sample a(5);             //此时 5 被赋值给了 a
        Sample b = a;           //然后这个临时对象的 .v 值 加上2  被赋值给了 b,   b变成了7
        PrintAndDouble(b);      //然后这个对象b 被传入 print函数,  又发生了一次拷贝,  值再次加2变成了 9

        Sample c = 20;
        PrintAndDouble(c);     //对象c 被传入 print函数,  又发生了一次拷贝,  值20加2变成了 22

        Sample d;
        d = a;                 //说明 d = a 没有发生拷贝,还是5
        cout << d.v;
        return 0;
}

这个题我们可以看出什么缺陷呢???

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值