類的陣列初始化後會呼叫拷貝建構函式

bug不存在的發表於2021-10-26

在初始化類的物件時,只有在類的陣列物件初始化時才會呼叫拷貝建構函式?,並且當我把類的陣列物件初始化時的字串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;

}


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70007877/viewspace-2839424/,如需轉載,請註明出處,否則將追究法律責任。

相關文章