最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++中調(diào)用復(fù)制(拷貝)函數(shù)的三種情況總結(jié)

 更新時間:2022年11月05日 09:00:21   作者:小劉是學生  
這篇文章主要介紹了C++中調(diào)用復(fù)制(拷貝)函數(shù)的三種情況總結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

1.同一類中的對象1復(fù)制給對象2

同樣是Point p1; Point p2;

例如:

int main(){
Point p1(1,2);
Point p2=p1; ? //這兩種都會調(diào)用復(fù)制構(gòu)造函數(shù)
Point p3(p1);
return 0;
}

2.以對象為函數(shù)的形參

例如:

void fun(Point p){ //p 作為了形參
?
cout<<p.height<<endl;
?
}

3.函數(shù)返回是類的對象

void fun2(){
Point p1(1,3);
return p1;
}
?
//或者還有返回*this的形式
?
void fun3(){
Point p2(5,8);
x+=4;
y+=6;
return *this;
}

注意:如果意外使用return *this;

導(dǎo)致調(diào)用的復(fù)制構(gòu)造函數(shù)里面會輸出多余的語句(這些語句不可刪除)

那么我們應(yīng)該 讓此函數(shù)的返回類型改為 void

例題如下(讓我記憶猶新)

?設(shè)計一個自己的字符串類MyString,內(nèi)部有一個私有成員char *sptr;該成員用于創(chuàng)建字符串對象時,在內(nèi)部使用動態(tài)內(nèi)存分配的方法分配一個字符數(shù)組用于存儲字符串的內(nèi)容。

  • 為該類設(shè)計構(gòu)造函數(shù)、析構(gòu)函數(shù)(對象析構(gòu)時,要釋放分配的數(shù)組)
  • 為該類設(shè)計返回字符串實際長度的成員函數(shù)
  • 為該類設(shè)計輸出字符串內(nèi)容的成員函數(shù)
  • 為該類設(shè)計實現(xiàn)字符串連接和字符串復(fù)制的成員函數(shù)。字符串連接和字符串復(fù)制時,要求重新分配數(shù)組,并釋放原有的數(shù)組。

main函數(shù)已經(jīng)寫好,請根據(jù)main函數(shù)的內(nèi)容完成該類的設(shè)計:

int main(){
MyString s1;
MyString s2("Hello");
MyString s3(s2);
?
s1.printString();
s2.printString();
s3.printString();
?
cout<<s1.getSize()<<" "<<s2.getSize()<<" "<<s3.getSize()<<endl;
?
MyString s4("HiChina");?
?
s2.stringCopy(s4);
s2.printString();
?
s3.stringCat(s4);
s3.printString();?
?
return 0;
}

正確解答如下:

//不包括主函數(shù)main部分
#include<bits/stdc++.h>
using namespace std;
class MyString{
?char *sptr;
?int size;
public:
?MyString(){
? size=0;
? sptr=new char[1];
? sptr[0]='\0';
? cout<<"Object Constructed. No Memory Allocated."<<endl;
?}
?MyString(char* s){//s是指針?
?? ?size=strlen(s);
?? ?sptr=new char[size+1];
?? ?sptr[size]='\0';
?? ?strcpy(sptr,s);
?? ?cout<<"Object Constructed. "<<size+1<<" Bytes Allocated."<<endl;
?}
?MyString(const MyString&s){//此處s是對象?
? size=s.size;
? sptr=new char[size+1];
? strcpy(sptr,s.sptr);
? cout<<"Object Constructed. "<<size+1<<" Bytes Allocated."<<endl;
?}
?~MyString(){
? if(sptr[0]=='\0'){cout<<"Object Destructed. No Memory Freed."<<endl;}
? else{
? ?cout<<"Object Destructed. "<<size+1<<" Bytes Freed."<<endl;
? }
? delete[]sptr;
?}
?void printString(){
? if(!size){cout<<"No Memory Allocated In This Object."<<endl;}
? else ?cout<<sptr<<endl;
?}
?int getSize(){
??? ?return size;
?}
void stringCopy(MyString&s){
? cout<<"String Copy, "<<s.size+1<<" Bytes Reallocated And "<<size+1<<" Bytes Freed."<<endl;
? size=s.size;
? sptr=new char[size+1];
? strcpy(sptr,s.sptr);
? sptr[s.size]='\0'; //沒有return *this?
?}
?void stringCat(MyString&p){
? char *p1=new char [size+p.size+1];
? size=size+p.size;
? cout<<"String Connection, "<<size+1<<" Bytes Reallocated And "<<p.size-1<<" Bytes Freed."<<endl;
? strcpy(p1,sptr);//p1是換杯子?
? sptr=new char [size+p.size+1];//創(chuàng)建新的大空間?
? strcpy(sptr,p1);
? strcat(sptr,p.sptr);
??
?}?
};

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++多態(tài)的實現(xiàn)及原理詳細解析

    C++多態(tài)的實現(xiàn)及原理詳細解析

    C++的多態(tài)性用一句話概括就是:在基類的函數(shù)前加上virtual關(guān)鍵字,在派生類中重寫該函數(shù),運行時將會根據(jù)對象的實際類型來調(diào)用相應(yīng)的函數(shù)。如果對象類型是派生類,就調(diào)用派生類的函數(shù);如果對象類型是基類,就調(diào)用基類的函數(shù)
    2013-09-09
  • C++?Cartographer源碼中關(guān)于傳感器的數(shù)據(jù)傳遞實現(xiàn)

    C++?Cartographer源碼中關(guān)于傳感器的數(shù)據(jù)傳遞實現(xiàn)

    這篇文章主要介紹了C++?Cartographer源碼中關(guān)于傳感器的數(shù)據(jù)傳遞實現(xiàn),前面已經(jīng)談到了Cartographer中添加軌跡的方法和傳感器的數(shù)據(jù)流動走向。發(fā)現(xiàn)在此調(diào)用了LaunchSubscribers這個函數(shù)來訂閱相關(guān)傳感器數(shù)據(jù)
    2023-03-03
  • C語言代碼實現(xiàn)井字棋游戲

    C語言代碼實現(xiàn)井字棋游戲

    這篇文章主要為大家詳細介紹了C語言代碼實現(xiàn)井字棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • C語言程序設(shè)計之指針的應(yīng)用詳解

    C語言程序設(shè)計之指針的應(yīng)用詳解

    為了讓大家能夠更準確的了解C語言中指針的使用,本文為大家準備了四個指針相關(guān)的例題,文中的示例代碼講解詳細,感興趣的小伙伴可以學習一下
    2022-11-11
  • C++ lambda閉包消除類成員變量的解決思路

    C++ lambda閉包消除類成員變量的解決思路

    在面向?qū)ο缶幊讨?類成員變量過多可能會造成干擾,可以采用函數(shù)式編程的思想,通過閉包和lambda表達式減少不必要的類成員,增強代碼的可控性和減少干擾,注意要正確使用mutable修飾符和值捕獲,以及合理安排lambda的初始化時機,感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • 詳解C語言對字符串處理函數(shù)的實現(xiàn)方法

    詳解C語言對字符串處理函數(shù)的實現(xiàn)方法

    這篇文章主要為大家介紹了C語言對字符串處理函數(shù)的實現(xiàn)方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • C語言學生成績管理系統(tǒng)源代碼

    C語言學生成績管理系統(tǒng)源代碼

    這篇文章主要為大家詳細介紹了C語言學生成績管理系統(tǒng)源代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Qt qml實現(xiàn)動態(tài)輪播圖效果

    Qt qml實現(xiàn)動態(tài)輪播圖效果

    這篇文章主要為大家詳細介紹了Qt和qml實現(xiàn)動態(tài)輪播圖效果的相關(guān)知識,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以參考一下
    2024-12-12
  • QT如何通過鼠標事件實現(xiàn)圖片的拖動和縮放

    QT如何通過鼠標事件實現(xiàn)圖片的拖動和縮放

    本文介紹了如何通過鼠標拖動移動圖片以及使用鼠標滾輪進行圖片縮放的技術(shù)實現(xiàn),包括完整的解決方案,ImageWidget.h、ImageWidget.cpp和main.cpp的編寫,以及詳細的函數(shù)解釋,如paintEvent()重繪圖片,以及平滑縮放和偏移量的應(yīng)用等,需要的朋友可以參考下
    2024-10-10
  • C/C++?QT實現(xiàn)解析JSON文件的示例代碼

    C/C++?QT實現(xiàn)解析JSON文件的示例代碼

    JSON是一種輕量級的數(shù)據(jù)交換格式,它是基于ECMAScript的一個子集,使用完全獨立于編程語言的文本格式來存儲和表示數(shù)據(jù)。這篇文章主要介紹了QT實現(xiàn)解析JSON文件的示例代碼,需要的可以參考一下
    2022-01-01

最新評論

井冈山市| 新和县| 江门市| 札达县| 叶城县| 庆阳市| 长武县| 东乌珠穆沁旗| 马山县| 汽车| 当涂县| 长宁县| 英超| 建瓯市| 仪陇县| 攀枝花市| 潞城市| 静安区| 桦川县| 东台市| 丰镇市| 榆社县| 酒泉市| 青浦区| 大方县| 天台县| 乡宁县| 福贡县| 南华县| 娄底市| 包头市| 滁州市| 宾川县| 嘉义市| 利津县| 子长县| 信丰县| 绵竹市| 江西省| 西宁市| 太仓市|