| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 576 人关注过本帖
标题:关于类的数组初始化后会调用拷贝构造函数?
只看楼主 加入收藏
hutianlun
Rank: 2
等 级:论坛游民
帖 子:21
专家分:13
注 册:2013-3-28
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
关于类的数组初始化后会调用拷贝构造函数?
这段代码,我的问题是:为什么在初始化类的对象时,只有在类的数组对象初始化时才会调用拷贝构造函数?并且当我把类的数组对象初始化时的字符串string的"张三"去掉时,就不会调用。
我用VS2010调试时,发现初始化的成员会在调用完自身的构造函数后会直接调用拷贝构造函数
程序代码:
#include <iostream>
#include<string>
using namespace std;
class Student
{
    private:
        int MathScore,CScore,EnglishScore;
    public:
        long stuNo;
        string stuName;
        char stuSex;
        void setScore(int mathScore,int cScore,int englishScore)
        {
            MathScore=mathScore;
            CScore=cScore;
            EnglishScore=englishScore;
        }
        void display();
        Student(string stuname)
        {stuNo=122301002;stuName=stuname;stuSex='F';}
   

        Student(long stuno)
        {stuNo=stuno;stuName="张三";stuSex='F';}
   

        Student(long stuno, string name)
        {

            stuNo=stuno;stuName=name;stuSex='F';
        }

        Student(long stuno, string name,char sex)
        {stuNo=stuno;stuName="123";stuSex=sex;}

        Student(const Student &s)
        {           

            cout<<"拷贝构造函数的调用" ;

            stuNo=s.stuNo;
            stuName=s.stuName;
            stuSex=s.stuSex;
            MathScore=s.MathScore;
               CScore=s.CScore;
            EnglishScore=s.EnglishScore;
        }

};
void Student::display(){
    cout<<"学生信息如下:"<<endl;
    cout<<"学号:"<<"\t\t姓名:"<<"\t性别:"<<"\t数学:"<<"\tC语言:"<<"\t英语:"<<endl;
    cout<<stuNo<<"\t"<<stuName<<"\t"<<stuSex<<"\t"<<MathScore<<"\t"<<CScore<<"\t"<<EnglishScore<<endl;   

}

int main(void)
{  cout<<"测试1";
   Student stu[4]={ Student("张三"),Student(122301002),Student(122302003,"赵五"),Student(122302004,"李四",'F')};
   cout<<"测试2";
   stu[0].setScore(80,87,56);
   stu[1].setScore(81,84,58);
   stu[2].setScore(80,90,53);
   stu[3].setScore(80,82,55);
   for (int i=0;i<4;i++)
   {
   stu[i].display();
   }
   Student stus("张三");
    stus.display();
   return 0;
}



[ 本帖最后由 hutianlun 于 2014-4-17 11:17 编辑 ]
搜索更多相关主题的帖子: 字符串 
2014-04-17 11:16
hubinyes
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:104
专家分:557
注 册:2014-2-4
收藏
得分:20 
构造类对象数组时,调用拷贝,复制对象到数组,

去掉“张三”时,该类没有无参构造函数,无法初始化对象,也就调不到拷贝函数
2014-04-17 22:00
hutianlun
Rank: 2
等 级:论坛游民
帖 子:21
专家分:13
注 册:2013-3-28
收藏
得分:0 
回复 2 楼 hubinyes
斑竹哥,你的回复是很深刻,但为什么我将第四个对象
        Student(122302004,"李四",'F')};中的"李四"去掉后,然后将
        Student(long stuno, string name,char sex)
        {stuNo=stuno;stuName="123";stuSex=sex;}
        中的string name去掉,改为
         Student(long stuno,char sex)
        {stuNo=stuno;stuName="123";stuSex=sex;},
他就不会调用拷贝构造函数,并且他也初始化了。
而且我这个代码,只会调用三次拷贝构造函数,stu[1]不会调用,所以我认为不是类对象数组初始化就调用拷贝构造函数
2014-04-17 22:19
hubinyes
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:104
专家分:557
注 册:2014-2-4
收藏
得分:0 
好像是这样子的,调用string的拷贝时,才调用本身拷贝。类对象数组这样初始化时,不调用拷贝的
2014-04-18 20:07
快速回复:关于类的数组初始化后会调用拷贝构造函数?
数据加载中...
 
   



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

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