标题:封闭类的复制构造函数问题
只看楼主
y442974010f
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2016-7-28
结帖率:0
已结贴  问题点数:20 回复次数:8 
封闭类的复制构造函数问题
#include <iostream>
using namespace std;
class Base {
public:
    int k;
    Base(int n) :k(n) { }
};
class Big {
public:
    int v; Base b;
    Big(int n) :v(n),b(n) {};
    Big(const Big &x)             编译器提示此处有错误,说Base没有合适的构造函数可用
    {
        v = x.v;
        b = x.b;
    }
};
int main() {
    Big a1(5);    Big a2 = a1;
    cout << a1.v << "," << a1.b.k << endl;
    cout << a2.v << "," << a2.b.k << endl;
    return 0;
}

不是很明白,有没有大神给我讲解一下?感谢!
搜索更多相关主题的帖子: include public 编译器 
2016-08-02 16:23
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:4 
#include <iostream>
using namespace std;
class Base {
public:
    int k;
    Base(int n) :k(n) { }
};
class Big {
public:
    int v; Base b;
    Big(int n) :v(n),b(n) {};
    Big(const Big &x) : v(x.v), b(x.b)
    {
    }
};
int main() {
    Big a1(5);    Big a2 = a1;
    cout << a1.v << "," << a1.b.k << endl;
    cout << a2.v << "," << a2.b.k << endl;
    return 0;
}
2016-08-02 19:34
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
得分:4 
回复 楼主 y442974010f
Big(const Big &x)
这个形参要求不带参数地构造一个Big对象。没有相关构造函数,一定会报错。
2016-08-05 10:17
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
得分:0 
回复 楼主 y442974010f
看错了,好像不是因为这个
2016-08-05 10:19
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
得分:0 
Big a2 = a1;
是这一步的调用找不到构造函数才对
2016-08-05 10:20
y442974010f
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2016-7-28
得分:0 
回复 5楼 yangfrancis
可是这一步不是调用的是复制构造函数吗,在类里已经定义了复制构造函数了啊?
2016-08-05 11:43
pigautumn
Rank: 1
等 级:新手上路
帖 子:1
专家分:4
注 册:2016-8-6
得分:4 
Base没有不带参数的构造函数,因此在Big的复制构造函数中的赋值代码 b = x.b; 找不到合适的b的构造函数
2016-08-06 09:36
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
得分:0 
回复 6楼 y442974010f
这个只算是初始化,a1不是作为参数传给构造函数的哦
2016-08-06 19:06
景昔
Rank: 1
等 级:新手上路
帖 子:1
专家分:4
注 册:2016-7-27
得分:4 
#include <iostream>
using namespace std;
class Base
{

public:   
    int k;
    Base();
    Base(int n):k(n){}
};
class Big:public Base
{

public:   
    int v;
    Big(int n,int n1):Base(n),v(n1){}
    Big(const Big &x)
    {
        v = x.v;
        k=x.k;
        
    }
};
int main() {
    Big a1(5,4);
    cout << a1.v << "," << a1.k << endl;
    return 0;
}
可能是要这么写吧
2016-08-08 21:00



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-467454-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.268016 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved