1. 程式人生 > >拷貝建構函式、運算子過載、深淺拷貝

拷貝建構函式、運算子過載、深淺拷貝

#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)
在申請動態記憶體中,返回指向記憶體首地址的指標
淺拷貝:只拷貝指標的首地址,這兩個物件最後指向的是同一塊記憶體,兩個指標指向同一塊記憶體
深拷貝:自定義的拷貝方式,重新申請一塊記憶體,把要拷貝的記憶體的內容放到申請的新的記憶體中,兩個指標指向不同的記憶體

相關推薦

C++拷貝建構函式運算子過載(VC實現)

String.h檔案: #ifndef STRING_H #define STRING_H #include <ostream> using namespace std; class String { public: String(){ m_pStr = nullptr

拷貝建構函式運算子過載深淺拷貝

#include<iostream> #include<string.h> using namespace std; class Student{ public: Student(){m_strName="Jim";}

c++單鏈表【建構函式運算子過載解構函式增刪查改等】

c++中的單向連結串列寫法:實現增刪查改、建構函式、運算子過載、解構函式等。建立標頭檔案SList.h#pragma once typedef int DataType; //SList要訪問SListNode,可以通過友元函式實現,友元函式在被訪問的類中 class SL

如何禁用拷貝建構函式和禁用過載賦值運算子

自定義了一個類,當你覺得不需要系統預設的拷貝建構函式以及過載賦值運算子時,你需要手動禁用這些。 如果類的成員中有指標的話,淺拷貝方式的結果是兩個不同物件的指標指向同一塊記憶體區域,容易出現訪問衝突,多次delete等錯誤,不是我們所希望的。 禁止拷貝/賦值 將拷貝建構函

C++ 複製建構函式運算子過載示例

string1.h // // Created by lance on 10/16/18. // #ifndef CPP_PRIMER_STRING1_H #define CPP_PRIMER_STRING1_H #include <iostream> u

C++語法,複製建構函式與=運算子過載

1、物件在建立時使用其他的物件初始化 Person p(q); //此時複製建構函式被用來建立例項p Person p = q; //此時複製建構函式被用來在定義例項p時初始化p 2、物件作為函式的引數進行值傳遞時 f(p); //此時p作為函式的引數進行值傳遞,p入棧時會呼叫複製建構函式建立一

子類的拷貝建構函式如何呼叫其父類的拷貝建構函式

class base { public:   base(int initialvalue = 0): x(initialvalue) {}   base(const base& rhs): x(rhs.x) {} private:   int x; }; class

C++的拷貝建構函式operator=運算子過載,深拷貝和淺拷貝explicit關鍵字

1、在C++編碼過程中,類的建立十分頻繁。 簡單的功能,當然不用考慮太多,但是從進一步深刻理解C++的內涵,類的結構和用法,編寫更好的程式碼的角度去考慮,我們就需要用到標題所提到的這些內容。 最近,在看單例模式,覺得十分有趣,然而如果想要掌握單例模式,就必須掌握這些內容。下

C++:面試時應該實現的string類(建構函式拷貝建構函式賦值運算子過載和解構函式

一、string類的4個基本函式是什麼? 建構函式 拷貝建構函式 賦值運算子過載 解構函式 二、函式實現 1.建構函式 String(char* pStr = " ")

讀書筆記:實現string類的建構函式拷貝建構函式解構函式過載運算子=

#include <iostream> #include <cassert> #include <cstring> using namespace std; class MyString{ public: MyString(co

類String的建構函式拷貝建構函式解構函式和賦值運算子過載函式的實現

#include <iostream> using namespace std; class String { public: String(const char* str= NULL); String(const String& other); ~

類模板以及賦值運算子過載拷貝建構函式

編譯器預設的拷貝建構函式,是發生的淺拷貝,像指標的賦值就會讓指標指向同一個地址空間,析構時就會對同一個地址空間釋放兩次,就會造成程式崩潰. 自定義在模板內的拷貝建構函式: Queue(const Queue<T> &src)//類物件

c++拷貝建構函式賦值運算子=過載拷貝與淺拷貝

 關鍵詞:建構函式,淺拷貝,深拷貝,堆疊(stack),堆heap,賦值運算子 摘要:     在面向物件程式設計中,物件間的相互拷貝和賦值是經常進行的操作。     如果物件在宣告的同時馬上進行的初始化操作,則稱之為拷貝運算。例如:         class1 A(

String類的建構函式解構函式拷貝建構函式賦值運算子過載

面試碰到的題,答案來自網路搜尋。 class myString{ private: char* m_data; public: myString(const char *str=NULL); myString(const myString &other)

1【C++】類&物件/建構函式/拷貝建構函式/操作符過載/解構函式

一、C++類 & 物件     C++ 在 C 語言的基礎上增加了面向物件程式設計,C++ 支援面向物件程式設計。類是 C++ 的核心特性,通常被稱為使用者定義的型別。     類用於指定物件的形式,它包含了資料表示法和用於處理資料的方法。類中的資料和方法稱為類的成員。函式在

C++類中的一些細節(過載重寫覆蓋隱藏,建構函式解構函式拷貝建構函式賦值函式在繼承時的一些問題)

1 函式的過載、重寫(重定義)、函式覆蓋及隱藏 其實函式過載與函式重寫、函式覆蓋和函式隱藏不是一個層面上的概念。前者是同一個類內,或者同一個函式作用域內,同名不同引數列表的函式之間的關係。而後三者是基類和派生類函式不同情況下的關係。 1.1 函式過載

【opencv 原始碼剖析】 四 Mat的賦值建構函式拷貝建構函式

1.賦值建構函式   右值引用 inline Mat& Mat::operator = (Mat&& m) { if (this == &m) return *this; release(); flags = m.fl

類的建構函式解構函式拷貝建構函式賦值函式

 類的四種基本預設函式:建構函式、解構函式、拷貝建構函式、賦值函式。 建構函式:建立類時,系統自動呼叫建構函式,用以初始化,分配空間,沒有自定義的建構函式時,系統預設一個無引數的建構函式。 class book { private:     int isBook;

C++:拷貝建構函式&賦值運算子過載函式

拷貝建構函式:          用一個已經存在的物件來生成一個相同型別的新物件。(淺拷貝)預設的拷貝建構函式:          如果自定義了拷貝建構函式,編譯器就不在生成預設的拷貝建構函

深度分析C++預設建構函式拷貝建構函式

對於C++初學者來說,時常不難看到他們說: 1.任何class如果沒有定義預設建構函式,那麼就會由編譯器來合成一個出來。 2.編譯器合成來的建構函式會明確確定裡面所有成員的值。(比如int型別成員會初始化成0) 呃,這當然是一部分C++新手的一廂情願吧