亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++中對象的賦值與復制操作詳細解析

2020-01-26 15:44:31
字體:
來源:轉載
供稿:網友

對象的賦值

如果對一個類定義了兩個或多個對象,則這些同類的對象之間可以互相賦值,或者說,一個對象的值可以賦給另一個同類的對象。這里所指的對象的值是指對象中所有數據成員的值。

對象之間的賦值也是通過賦值運算符“=”進行的。本來賦值運算符“=”只能用來對單個的變量賦值,現在被擴展為兩個同類對象之間的賦值,這是通過對賦值運算符的重載實現的。

實際上這個過程是通過成員復制來實現的,即將一個對象的成員值一一復制給另外一個對象的成員。
對象賦值的一般形式:

對象名1=對象名2;

注意,對象1和對象2必須是屬于同一個類

=========示例代碼1.1===============

復制代碼 代碼如下:

#include<iostream>
#include<string>
using namespace std;
class Student
{
 public:
  Student(int nu=0,string na="NULL",int=0);//構造函數
  void show();
 private:
  int num;
  string name;
  int score;
};
Student::Student(int nu,string na,int sc)
{
 num=nu;
 name=na;
 score=sc; 
}
void Student::show()
{
 cout<<"date:"<<endl;
 cout<<"num:"<<num<<"/tname:"<<name<<"/tscore:"<<score<<endl;
}
int main()
{
 Student s1(1,"qianshou",99);
 s1.show();
 Student s2;
 s2=s1;
 s2.show();
 return 0;
}

運行界面:

說明:

(1)對象的賦值值對其中的數據成員賦值,而不對成員函數賦值。

數據成員是占存儲空間的,不同的對象的數據成員占有不同的存儲空間,賦值過程是將一個對象的數據成員在存儲空間的狀態復制給另一對象的數據成員的存儲空間。

而不同對象的成員函數是同一個函數代碼段,既不需要也沒法向它們賦值。

(2)類的數據成員中,不能包括動態分配的數據。


對象的復制
有時我們需要用到多個完全相同的對象,并進行相同的初始化?;蛘哂袝r候,我們需要將對象在某一瞬間的狀態保留下來。
為了處理這種情況,C++提供了對象的復制機制,用一個以后的對象快速的復制出多個完全相同的對象。
其一般形式為

類名 對象2(對象1)

用對象1復制出對象2.

復制代碼 代碼如下:

Student s2(s1); 

可以看到:它與前面介紹的定義對象的方式類似,但是括號中給出的參數不是一般的變來那個,而是對象。
在建立一個新對象時,調用一個特殊的構造函數――復制構造函數。

這個函數是這樣的

復制代碼 代碼如下:

    Student::Student(const Student &b) 
    { 
        num=b.num; 
        name=b.name; 
        score=b.score; 
    } 

復制構造函數也是構造函數,但它只有一個參數,這個參數時本類的對象,而且采用對象的引用形式(一般約定加const聲明,使參數值不能改變,以免在調用函數時因不慎而使對象值被修改)。此復制構造函數的作用就是將實參對象的各數據成員的值一一賦給新的對象中的成員的值。
對于語句
復制代碼 代碼如下:

Student s2(s1); 

這實際上也是建立對象的語句,建立一個新對象s2。由于在括號內給定的實參是對象,編譯系統就調用復制構造函數,實參s1的值傳給形參b(b是s1的引用)。

C++還提供另外一種方便用戶的復制形式,用賦值號代替括號
其一般形式是:
類名    對象名1        =        對象名2;

復制代碼 代碼如下:

Student s2=s1;

還可以在一個語句中進行多個對象的賦值。
復制代碼 代碼如下:

Student    s2=s1,s3=s2,s4=s3; 

對象的復制和賦值的區別
對象的賦值是對一個已經存在的對象賦值,因此必須先定義被賦值的對象,才能進行賦值。而對象的復制則是一個從無到有地建立一個新的對象,并使它與一個已有的對象完全相同(包括對象的結構和成員的值)
復制代碼 代碼如下:

    #include<iostream> 
    #include<string> 
    using namespace std; 
    class Student 
    { 
        public: 
            Student(int nu=0,string na="NULL",int=0);//構造函數 
            void show(); 
            void reset();  
        private: 
            int num; 
            string name; 
            int score;  
    }; 
    Student::Student(int nu,string na,int sc) 
    { 
        num=nu; 
        name=na; 
        score=sc;    
    } 
    void Student::reset() 
    { 
        num=0; 
        name="reset"; 
        score=0; 
    } 
    void Student::show() 
    { 
        cout<<"date:"<<endl; 
        cout<<"num:"<<num<<"/tname:"<<name<<"/tscore:"<<score<<endl; 
    } 
    int main() 
    { 
        Student s1(1,"qianshou",99);//實例化一個對象s1  
        Student s2;//聲明一個對象s2 
        s2=s1;//進行對象的賦值,將對象s1的值賦給s2  
        s2.show(); 
        Student s3(s2);// 進行對象的復制操作  
        s3.show(); 
        s3.reset();//s3中的數據成員發生了改變  
        Student s4=s3;//將改變之后的s3復制為s4 
        s4.show();  
        return 0; 
    } 

運行結果:

需要說明的是,賦值構造函數和復制構造函數的調用都是由系統自動完成的。程序員可以自己定義復制構造函數,如果沒有定義構造函數,則編譯系統會自動提供一個默認的夠函數,其作用只是簡單的復制類中的數據成員。
我們可以自定義一個復制構造函數,以便查看效果:

復制代碼 代碼如下:

    #include<iostream> 
    #include<string> 
    using namespace std; 
    class Student 
    { 
        public: 
            Student(int nu=0,string na="NULL",int=0);//構造函數 
            Student(const Student &s); 
            void show(); 
            void reset();  
        private: 
            int num; 
            string name; 
            int score;  
    }; 
    Student::Student(int nu,string na,int sc) 
    { 
        num=nu; 
        name=na; 
        score=sc;    
    } 
    Student::Student(const Student &s) 
    { 
        num=s.num; 
        name=s.name; 
        score=s.score; 
        cout<<"復制構造函數執行完畢"<<endl; 
    } 
    void Student::reset() 
    { 
        num=0; 
        name="reset"; 
        score=0; 
    } 
    void Student::show() 
    { 
        cout<<"date:"<<endl; 
        cout<<"num:"<<num<<"/tname:"<<name<<"/tscore:"<<score<<endl; 
    } 
    int main() 
    { 
        Student s1(1,"qianshou",99);//實例化一個對象s1  
        Student s2;//聲明一個對象s2 
        s2=s1;//進行對象的賦值,將對象s1的值賦給s2  
        s2.show(); 
        Student s3(s2);// 進行對象的復制操作  
        s3.show(); 
        s3.reset();//s3中的數據成員發生了改變  
        Student s4=s3;//將改變之后的s3復制為s4 
        s4.show();  
        return 0; 
    } 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美在线视频导航| 国产一区私人高清影院| 国产成人小视频在线观看| 久久伊人91精品综合网站| 欧美日韩中文字幕在线| 精品视频久久久| 日韩中文视频免费在线观看| 欧美日韩一区二区免费视频| 久久精品国产96久久久香蕉| 日韩精品极品在线观看| 日韩在线视频一区| 中文字幕不卡在线视频极品| 欧美视频在线免费| 国产免费一区二区三区在线能观看| 欧美激情视频在线| 中文.日本.精品| 国产成人jvid在线播放| 欧美精品videossex88| 亚洲国产精品久久久久秋霞不卡| 久久精品一偷一偷国产| 国产精品日韩久久久久| 欧美性猛交xxxx黑人猛交| 97人人爽人人喊人人模波多| 亚洲黄页视频免费观看| 51久久精品夜色国产麻豆| 久精品免费视频| 成人久久一区二区| 亚洲精品av在线| 亚洲春色另类小说| 岛国视频午夜一区免费在线观看| 亚洲欧美国产va在线影院| 欧美xxxx做受欧美| 久久久之久亚州精品露出| 免费91麻豆精品国产自产在线观看| 中文字幕一区二区三区电影| 97热在线精品视频在线观看| 亚洲精品一区中文| 日韩欧美有码在线| 日韩中文理论片| 欧美性xxxxxxxxx| 亚洲区在线播放| 久久精品免费播放| 久久国产精品首页| 亚洲伦理中文字幕| 免费不卡在线观看av| 欧美激情国内偷拍| 国产精品亚发布| 国产一区二区三区精品久久久| 尤物精品国产第一福利三区| 欧美日韩国产成人在线观看| 久久精视频免费在线久久完整在线看| 亚洲一区二区三区毛片| 亚洲片国产一区一级在线观看| 一本一本久久a久久精品牛牛影视| 久久精品国产亚洲精品| 日韩有码在线视频| 欧美成aaa人片免费看| 欧美日韩精品在线视频| 国产精品美腿一区在线看| 欧美激情视频网址| 日本乱人伦a精品| 亚洲自拍偷拍网址| 国产精品∨欧美精品v日韩精品| 久久的精品视频| 国产精品视频26uuu| 国产日韩一区在线| 亚洲精品丝袜日韩| 色婷婷综合成人av| 久久免费福利视频| 91精品国产精品| 欧美xxxwww| 亚洲欧美日韩国产中文| 欧美日韩一区二区免费视频| 久久国产精品偷| 在线观看国产精品91| 97国产在线视频| 96sao精品视频在线观看| 亚洲精品在线观看www| 久久久久国产精品www| 国产一区二区三区丝袜| 日韩欧美高清在线视频| 亚洲裸体xxxx| 国产精品成人播放| 91精品国产自产在线老师啪| 欧美一级淫片videoshd| 成人综合网网址| 久久久久久久一区二区三区| 亚洲午夜色婷婷在线| 黑人与娇小精品av专区| 亚洲精品日韩在线| 欧美日韩中文字幕在线视频| 亚洲欧美日韩精品久久奇米色影视| 久久国产一区二区三区| 国产精品男人爽免费视频1| 亚洲精品福利视频| 亚洲国模精品私拍| 午夜精品三级视频福利| 亚洲免费一级电影| 国产日产欧美a一级在线| 国产成人亚洲综合青青| 国产精品久久久久7777婷婷| 国产性猛交xxxx免费看久久| 国色天香2019中文字幕在线观看| 日韩一区av在线| 国模吧一区二区三区| 欧美在线观看一区二区三区| 国产精品美女主播| 国产美女久久精品香蕉69| 91老司机精品视频| 欧美精品videosex牲欧美| 懂色av一区二区三区| 91av免费观看91av精品在线| 亚洲精品日韩丝袜精品| 亚洲影院在线看| 亚洲无亚洲人成网站77777| 亚洲国产精品va| 国模视频一区二区三区| 亚洲国产精品久久91精品| 亚洲国产精品99久久| 91精品国产91久久久久久吃药| 欧美性xxxx| 国产精品成人一区二区三区吃奶| 欧美日韩国产精品一区二区不卡中文| 久久人人爽人人爽人人片av高清| 欧美中文字幕精品| 91精品视频在线看| 91在线无精精品一区二区| 中文字幕亚洲综合| 久久久久久久久亚洲| 国产成人在线一区二区| 国产精选久久久久久| 欧美怡红院视频一区二区三区| 久久国内精品一国内精品| 91久久精品国产| 亚洲偷欧美偷国内偷| 91亚洲精品久久久久久久久久久久| 国产69精品久久久久9| 国产视频精品在线| 国产精品视频免费观看www| 国产成人精品日本亚洲专区61| 91老司机精品视频| 人妖精品videosex性欧美| 在线成人激情黄色| 国产精品美女www| 中文欧美日本在线资源| 色七七影院综合| 亚洲美女视频网| 欧美另类极品videosbestfree| 亚洲日本成人女熟在线观看| 亚洲少妇中文在线| 精品国产91乱高清在线观看| 国产精品第三页| 亚洲欧美日韩一区二区三区在线| 欧美激情视频一区二区| 久久亚洲春色中文字幕| 欧美韩日一区二区| 国产一区深夜福利| 欧美另类xxx| 欧美性精品220| 欧美插天视频在线播放| 亚洲伦理中文字幕| 欧美激情国产日韩精品一区18| 日本久久久久久| 日韩www在线|