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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決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)/*這是什么,怎么它的大括弧里給上面的一樣呢?好像去掉也沒有關系,程序也是對的。*/{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<<"調用析構函數(shù)"<<endl;delete title;delete author;}//這個析構函數(shù)好像去掉也可以的唉。為什么?void print(){cout<<"書名:"<<title<<endl;cout<<"作者:"<<author<<endl;cout<<"月銷售量:"<<numsold<<endl;}};int main(){Book obj1("數(shù)據(jù)結構","嚴蔚敏",200);//為什么可以用obj1,沒有定義為什么也可以來用?obj1.print();Book obj2("C++語言程序設計","李春葆",210);obj2.print();return 0;}運行結果如下:
查看完整描述

2 回答

?
四季花海

TA貢獻1811條經驗 獲得超5個贊

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

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

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

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


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

TA貢獻1804條經驗 獲得超8個贊

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

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

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

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

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

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

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

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

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

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

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

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

 


查看完整回答
反對 回復 2022-12-21
  • 2 回答
  • 0 關注
  • 122 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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