第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

問題有些多,但真的的確不懂啊,拜謝拜謝

問題有些多,但真的的確不懂啊,拜謝拜謝

郎朗坤 2022-12-17 21:17:07
#include<iostream>#include<cstring>using namespace std;class Book{char* title;char* author;int numsold;public:Book(){} //這一行為什么要用?似乎去掉對程序也沒有影響,是為什么?Book(const char* str1,const char*str2,const int num)//這個以下的是函數(shù)嗎?非得用Book這個名嗎?{int len=strlen(str1);title=new char[len+1];strcpy(title,str1);len=strlen(str2);author=new char[len+1];strcpy(author,str2);numsold=num;}void setbook(const char *str1,const char *str2,const int num)/*這是什么,怎么它的大括弧里給上面的一樣呢?好像去掉也沒有關(guān)系,程序也是對的。*/{int len=strlen(str1);title=new char[len+1];strcpy(title,str1);len=strlen(str2);author=new char[len+1];strcpy(author,str2);numsold=num;}~Book(){cout<<"調(diào)用析構(gòu)函數(shù)"<<endl;delete title;delete author;}//這個析構(gòu)函數(shù)好像去掉也可以的唉。為什么?void print(){cout<<"書名:"<<title<<endl;cout<<"作者:"<<author<<endl;cout<<"月銷售量:"<<numsold<<endl;}};int main(){Book obj1("數(shù)據(jù)結(jié)構(gòu)","嚴(yán)蔚敏",200);//為什么可以用obj1,沒有定義為什么也可以來用?obj1.print();Book obj2("C++語言程序設(shè)計","李春葆",210);obj2.print();return 0;}運(yùn)行結(jié)果如下:
查看完整描述

2 回答

?
四季花海

TA貢獻(xiàn)1811條經(jīng)驗 獲得超5個贊

Book(){} //這一行為什么要用?似乎去掉對程序也沒有影響,是為什么?——定義一個無參(默認(rèn))構(gòu)造函數(shù),如果去掉,就不能創(chuàng)建沒有初始值的對象了。比如,Book b; 就會出錯。

Book(const char* str1,const char*str2,const int num)//這個以下的是函數(shù)嗎?非得用Book這個名嗎?——這是(有參)構(gòu)造函數(shù),構(gòu)造函數(shù)的名字必須與類名相同,所以必須用Book。

void setbook(const char *str1,const char *str2,const int num)/*這是什么,怎么它的大括弧里給上面的一樣呢?好像去掉也沒有關(guān)系,程序也是對的。*/——這是設(shè)置類數(shù)據(jù)成員值的函數(shù),其函數(shù)體一般都與有參構(gòu)造函數(shù)相同。如果去掉這個函數(shù),則所創(chuàng)建的對象就無法改變其成員的值了。

//這個析構(gòu)函數(shù)好像去掉也可以的唉。為什么?——如果沒有這個析構(gòu)函數(shù),雖然運(yùn)行不報錯,但是在對象被釋放時對象所占據(jù)的內(nèi)存不能被釋放,造成內(nèi)存泄漏。


查看完整回答
反對 回復(fù) 2022-12-21
?
胡說叔叔

TA貢獻(xiàn)1804條經(jīng)驗 獲得超8個贊

學(xué)習(xí)過程要循序漸進(jìn),如果問題集中出現(xiàn),先一個問題一個問題去弄懂去測試,其他暫時忽略。
重點(diǎn):new、delete兩個關(guān)鍵詞多了解下其作用。

例子中是一個Book類,而以類名作為函數(shù)的叫做構(gòu)造函數(shù),構(gòu)造函數(shù)只在對象創(chuàng)建時由系統(tǒng)調(diào)用,用于初始化對象內(nèi)部的成員變量(如果需要)。下面一個個解答。
1、Book(){}
函數(shù)接口中沒有定義參數(shù)的,叫做無參構(gòu)造函數(shù),也叫默認(rèn)構(gòu)造函數(shù),之所以叫默認(rèn)構(gòu)造函數(shù),因為如果你去掉或沒有定義,系統(tǒng)會自動提供一個無參構(gòu)造函數(shù),什么也不會做,只是為了統(tǒng)一接口規(guī)范或標(biāo)準(zhǔn)。當(dāng)然你也可以在默認(rèn)構(gòu)造函數(shù)體內(nèi)(大括號中)編寫初始化代碼。一般來說,無參構(gòu)造函數(shù)所初始化的值是可以事先確定的。

2、Book(const char* str1,const char*str2,const int num)
該函數(shù)與類名同名,因此也是構(gòu)造函數(shù),區(qū)別在于這個函數(shù)是帶參數(shù)的,所以叫有參構(gòu)造函數(shù)。如果外部程序創(chuàng)建Book對象時需要使用一些外部(相對于對象內(nèi)部)值去初始化對象內(nèi)部的變量,就可以采用該函數(shù)創(chuàng)建對象。

比如:
//假設(shè)pstr1和pstr2是2個字符串指針 
Book *pbook=new Book(pstr1,pstr2,100);
創(chuàng)建對象時就會調(diào)用該函數(shù),將外部程序的2個字符串指針和一個整數(shù)常量傳遞給函數(shù),用于初始化。

3、void setbook(const char *str1,const char *str2,const int num)/
這是普通函數(shù),作用和2中所述的構(gòu)造函數(shù)一樣,你可以發(fā)現(xiàn)參數(shù)和代碼都相同,都是用于初始化變量的。區(qū)別在于普通函數(shù)只有在對象創(chuàng)建之后顯式調(diào)用。
比如
Book *pBook=new Book();//采用默認(rèn)構(gòu)造函數(shù)創(chuàng)建對象,也就是不進(jìn)行初始化
pBook->setbook(pstr1,pstr2,100);//對象創(chuàng)建后,再顯式調(diào)用setbook函數(shù)進(jìn)行初始化對象成員的工作。

如此,Book類提供了兩種初始化變量的途徑,這樣外部程序可以根據(jù)需要靈活選擇,前者,創(chuàng)建對象前數(shù)據(jù)已確定時采用,后者,創(chuàng)建對象時數(shù)據(jù)不確定采用。

例子中,由于主函數(shù)main沒有采用后者去調(diào)用setbook函數(shù),所以去掉也不會受影響。

4、~Book()
在類名前面加個~號的函數(shù)叫析構(gòu)函數(shù),該函數(shù)僅在對象被釋放的時候被執(zhí)行,用于釋放對象內(nèi)部動態(tài)分配的內(nèi)存,防止內(nèi)存泄漏。此例中,析構(gòu)函數(shù)釋放了title和author兩個指針指向的內(nèi)存塊。注意前面的delete關(guān)鍵詞,該關(guān)鍵詞用于釋放指針指向的內(nèi)存塊。而這兩個變量是char *類型,就是字符指針類型。同時注意構(gòu)造函數(shù)中這兩個指針都被指向了新建的內(nèi)存塊的地址。
title=new char[len+1];
author=new char[len+1];

去掉沒有問題是因為這個程序簡單,輸出完程序就結(jié)束了,系統(tǒng)會在程序結(jié)束時自動釋放所有動態(tài)分配的內(nèi)存空間,但是如果程序復(fù)雜的話就會出現(xiàn)問題。

5、Book obj1("數(shù)據(jù)結(jié)構(gòu)","嚴(yán)蔚敏",200);
此語句意思為創(chuàng)建一個obj1的對象,并以括號內(nèi)的參數(shù)進(jìn)行初始化,也就是調(diào)用了有參構(gòu)造函數(shù)。

創(chuàng)建對象有兩種方法(以調(diào)用默認(rèn)構(gòu)造函數(shù)舉例):
一是靜態(tài)創(chuàng)建,對象被分配在棧上,不返回指針,使用對象名作為別名,以映射內(nèi)存地址。
Book obj1;
二是動態(tài)創(chuàng)建對象,對象被分配在堆上,返回的是指針。
Book * p1=new Book();

最后,凡是通過new的對象都需要delete釋放內(nèi)存空間。

 


查看完整回答
反對 回復(fù) 2022-12-21
  • 2 回答
  • 0 關(guān)注
  • 111 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號