欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

1.同一類(lèi)中的對(duì)象1復(fù)制給對(duì)象2

同樣是Point p1; Point p2;

例如:

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

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

例如:

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

3.函數(shù)返回是類(lèi)的對(duì)象

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ù)里面會(huì)輸出多余的語(yǔ)句(這些語(yǔ)句不可刪除)

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

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

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

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

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

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是對(duì)象?
? 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'; //沒(méi)有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);
??
?}?
};

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

相關(guān)文章

  • STL 的string類(lèi)怎么啦

    STL 的string類(lèi)怎么啦

    在我們研究string類(lèi)犯了什么毛病之前,還讓我先說(shuō)一下如何了解一個(gè)C++的類(lèi)。我們要了解一個(gè)C++的類(lèi),一般來(lái)說(shuō),要從三個(gè)方面入手
    2013-11-11
  • C語(yǔ)言實(shí)現(xiàn)統(tǒng)計(jì)字符串單詞數(shù)

    C語(yǔ)言實(shí)現(xiàn)統(tǒng)計(jì)字符串單詞數(shù)

    這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)統(tǒng)計(jì)字符串單詞數(shù),代碼非常的簡(jiǎn)潔,有需要的小伙伴快來(lái)參考下。
    2015-03-03
  • Qt基于TCP實(shí)現(xiàn)客戶(hù)端與服務(wù)端的連接

    Qt基于TCP實(shí)現(xiàn)客戶(hù)端與服務(wù)端的連接

    這篇文章主要為大家詳細(xì)介紹了Qt基于TCP實(shí)現(xiàn)客戶(hù)端與服務(wù)端的連接,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Seesion在C++服務(wù)端的使用方法

    Seesion在C++服務(wù)端的使用方法

    這篇文章主要介紹了Seesion在C++服務(wù)端是怎么使用的?本文給出了解決方案和實(shí)例代碼供大家參考,需要的朋友可以參考下
    2020-02-02
  • C語(yǔ)言fprintf()函數(shù)和fscanf()函數(shù)的具體使用

    C語(yǔ)言fprintf()函數(shù)和fscanf()函數(shù)的具體使用

    本文主要介紹了C語(yǔ)言fprintf()函數(shù)和fscanf()函數(shù)的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • C++ 中字符串操作--寬窄字符轉(zhuǎn)換的實(shí)例詳解

    C++ 中字符串操作--寬窄字符轉(zhuǎn)換的實(shí)例詳解

    這篇文章主要介紹了C++ 中字符串操作--寬窄字符轉(zhuǎn)換的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文能幫助到大家實(shí)現(xiàn)這樣的功能更,需要的朋友可以參考下
    2017-09-09
  • 深入解析C++中多態(tài)性和虛函數(shù)使用原理

    深入解析C++中多態(tài)性和虛函數(shù)使用原理

    這篇文章主要為大家介紹了深入解析C++中多態(tài)性和虛函數(shù)使用原理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • C++賦值運(yùn)算符

    C++賦值運(yùn)算符

    這篇文章主要介紹了C++賦值運(yùn)算符,C++當(dāng)中允許類(lèi)對(duì)象賦值,這是通過(guò)默認(rèn)的重載賦值運(yùn)算符實(shí)現(xiàn)的,下面我們就來(lái)介紹介紹該內(nèi)容吧,,需要的朋友可以參考一下
    2022-01-01
  • C++對(duì)象排序的比較你了解嗎

    C++對(duì)象排序的比較你了解嗎

    這篇文章主要為大家詳細(xì)介紹了C++對(duì)象排序的比較,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • C++實(shí)現(xiàn)LeetCode(904.水果裝入果籃)

    C++實(shí)現(xiàn)LeetCode(904.水果裝入果籃)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(904.水果裝入果籃),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07

最新評(píng)論