| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 523 人关注过本帖
标题:关于派生类的复制构造函数问题,实在想不通
只看楼主 加入收藏
骇客不会飞
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2013-9-6
结帖率:0
收藏
已结贴  问题点数:10 回复次数:3 
关于派生类的复制构造函数问题,实在想不通
class AAA
{
    private:
         char * label;
         int rating;
    public:
         AAA(const AAA &rs);
        …………
}
AAA::AAA(const AAA & rs)
{
label=new char[strlen(rs.label)+1];
strcpy(label,rs.label);
rating=rs.rating;
}

class BBB:public AAA
{
   private:
         char * color[10];
   public:
   friend std::ostream & operator<<(std::ostream & os,const BBB & rs);  //输出为BBB派生类的三个数据成员,定义懒得写;
  …………   //无派生类的构造函数
}
int main()
{
BBB balloon("red","blimpo",4);     //其中也包含了对AAA基类的数据成员初始化
BBB ballon2(balloon);
cout<<balloon2<<endl;
}
输出结果为balloon的三个值(即red ,blimpo ,4),书上说的是如果没有为派生类显式定义复制构造函数,那么派生类默认使用基类的复制构造函数复制基类的部分,我的问题:按照说法应该是:复制构造函数只复制了label和rating的值,怎么连color值也复制给了balloon2呢?
搜索更多相关主题的帖子: private rating public friend color 
2013-10-02 13:03
blueskiner
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:227
专家分:707
注 册:2008-9-22
收藏
得分:10 
你应该在BBB的构造里处理AAA的构造。
2013-10-02 16:04
blueskiner
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:227
专家分:707
注 册:2008-9-22
收藏
得分:0 
刚想了想,你的代码很多问题,我给你打了一份,有些需要加分号之类的细节不能忽视。请养成严谨的风格。

#include <iostream>


class AAA
{
private:
    char* label;
    int rating;
public:
    AAA(const AAA& rs)
    {
        label=new char[strlen(rs.label)+1];
        strcpy(label,rs.label);
        rating=rs.rating;
    }
    AAA(const char* pC, int nR)
    {
        label=new char[strlen(pC)+1];
        strcpy(label,pC);
        rating=nR;
    }
};

class BBB : public AAA
{
private:
    char color[10];
public:
    friend std::ostream & operator<<(std::ostream & os,const BBB & rs) {  //输出为BBB派生类的三个数据成员,定义懒得写;
        std::cout << "Label" << std::endl;
        std::cout << "Rating" << std::endl;
        std::cout << "Color" << std::endl;
        return os;
    }

    //无派生类的构造函数
    BBB(const AAA& a, const char* pC) : AAA(a)
    {
        strcpy(color, pC);
    }
};

int main(int argc, char** argv)
{
    AAA av("blimpo", 4);
    BBB balloon(av, "red");   //其中也包含了对AAA基类的数据成员初始化
    BBB ballon2(balloon);
    std::cout<<ballon2<<std::endl;

    return 0;
}
2013-10-02 16:21
骇客不会飞
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2013-9-6
收藏
得分:0 
回复 3楼 blueskiner
其实那些我都懒得写出来而已
2013-10-02 20:58
快速回复:关于派生类的复制构造函数问题,实在想不通
数据加载中...
 
   



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

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