拷貝構造函數、運算符重載、深淺拷貝

#include<iostream>
#include<string.h>

using namespace std;

class Student{
public:
        Student(){m_strName="Jim";}
        /*
        默認的拷貝構造函數:
        Student(const Student &stu){}
        */
        Student(const Student &stu){
        m_strName=stu.m_strName;
    }
        //顯性定義的拷貝構造函數

    //運算符重載
    friend istream & operator>>(istream & is,Student& stu);
    friend ostream & operator<<(ostream & os,Student& stu);
private:
        string m_strName;

};
istream & operator>>(istream & is,Student& stu){
    is>> stu.m_strName;
    return is;
}
ostream & operator<<(ostream & os,Student& stu){
    os<< stu.m_strName;
    return os;
}
int main()
{
    Student stu1;
    cout<<"請輸入一個整數stu1"<<endl;
    cin>>stu1;
    cout<<endl;//把輸入的字符串賦值給對象需要對輸入輸出運算符重載,C++對象的輸入輸出需要運算符重載
    Student stu2=stu1;
    Student stu3(stu1);
    cout<<"stu1="<<stu1<<","<<"stu2="<<stu2<<","<<"stu3="<<stu3<<endl;
    return 0;
    //拷貝構造:拿已經定義過的有值的對象給新的對象初始化
    //複製運算符=重載:定義過的兩個對象,其中一個對象的值賦值給另一個對象
}

深拷貝與淺拷貝

深拷貝與淺拷貝:申請動態內存時才存在(new、delete)
在申請動態內存中,返回指向內存首地址的指針
淺拷貝:只拷貝指針的首地址,這兩個對象最後指向的是同一塊內存,兩個指針指向同一塊內存
深拷貝:自定義的拷貝方式,重新申請一塊內存,把要拷貝的內存的內容放到申請的新的內存中,兩個指針指向不同的內存

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章