C++第6周專案1
【題目】下面的程式存在編譯錯誤。有兩種方法可以修改,請給出這兩種修改方案,在報告中說明你傾向於用哪一種?為什麼?處理此類問題的原則是什麼?
class C
{private:
int x;
public:
C(int x){this->x= x;}
int getX(){return x;}
};
void main()
{
const C c(5);
cout<<c.getX(); //這一行將會出現錯誤
system("pause");
}
【分析】這個程式中的問題在於第10行定義了常物件c;然而在第11行對c的訪問中,用了getX()函式,該函式並不是一個const成員函式。
【確症】常物件要由常成員函式進行操作。
【藥方】(1)第10行,定義物件 c 時,去掉限定詞 const—— c將不享受由const帶來的保護;(2)在第 6 行成員函式getX()的定義中,指定const 限定詞,指明為一個常成員函式——該函式將不能實施對物件的修改。本題只意在強化這一語法點,程式也並無實際的意義,這兩種方法都可以。但在實際應用中,要根據實際的需求確定合適的方案。
【方案1】定義物件 c 時,去掉限定詞 const—— c將不享受由const帶來的保護
class C {private: int x; public: C(int x){this->x= x;} int getX(){return x;} }; void main() { C c(5); //去掉const cout<<c.getX(); system("pause"); }
【方案2】成員函式getX()的定義中,指定const 限定詞,指明為一個常成員函式——該函式將不能實施對物件的修改
class C
{private:
int x;
public:
C(int x){this->x= x;}
int getX() const {return x;} //加上const,成為常成員函式
};
void main()
{
const C c(5);
cout<<c.getX();
system("pause");
}
【評價】在本題中,getX()函式意在返回私有成員x的值,是一個典型的只讀不修改的函式。為了防止其中意外的錯誤修改,常要用 const 進行限定。這樣處理後,函式既可以被const 物件呼叫,也可以被非const物件呼叫。所以,此方案更好。
將一個函式宣告為常成員函式仍然是一個粗線條的處理。更常見的,我們用const 限定函式的引數,這樣可以實現更靈活的限定。
(本文完)
相關推薦
C++第6周專案1
【題目】下面的程式存在編譯錯誤。有兩種方法可以修改,請給出這兩種修改方案,在報告中說明你傾向於用哪一種?為什麼?處理此類問題的原則是什麼?class C {private: int x; public: C(int x){this->x= x;}
C++第11周專案2(1)參考——百錢百雞
【專案2:窮舉法解決組合問題】先閱讀例題,領會窮舉法(意為“窮盡式列舉”,也稱列舉)的思想,然後自行選題進行解決,掌握這種程式設計的一般方法。任務:利用窮舉的方法解決下面的問題(選做一道即算完成任務,其他可以抽時間自由安排,多做會使你更聰明。)(1)百錢百雞問題:中國古代數學家
C++第11周專案2(6)參考——誰是小偷?
【專案2:窮舉法解決組合問題】先閱讀例題,領會窮舉法(意為“窮盡式列舉”,也稱列舉)的思想,然後自行選題進行解決,掌握這種程式設計的一般方法。任務:利用窮舉的方法解決下面的問題(選做一道即算完成任務,其
第16周專案1 驗證演算法(6)堆排序
問題: /* * Copyright (c)2015,煙臺大學計算機與控制工程學院 * All rights reserved. * 檔名稱:專案1-6.cbp * 作 者:張芸嘉 *
2013-C++第15周專案參考解答連結集
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
C++第15周專案3 -約瑟夫環
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
2015年大一下第6周專案3-分數類中的運算子過載(2)分數與整數的加減乘除
/* *Copyright (c) 2014,煙臺大學計算機學院 *All rights reserved. *檔名稱:Annpion.cpp *作者:王耀鵬 *完成日期:2015年4月29日 *版本號:v1.0 * *問題描述:在(1)的基礎上,實現分數類中的物件和整型數
第6周作業1-閏年之迴圈判斷
參照了一下網上的;第八,第十三和十四橫所代表的意思 public class LeapYearFor { /** * @param args */ public static void main(String[] args) { // TODO Auto-
C++第14周專案2
【專案2】寫一個程式,定義抽象基類Shape,由它派生出3個派生類,Circle(圓形)、Rectangle(矩形)、Triangle(三角形)。用如下的main()函式,求出定義的幾個幾何體的面積和。 int main() { Circle c1(12.6),c2(
第16周專案1 驗證演算法(7)歸併排序
問題: /* * Copyright (c)2015,煙臺大學計算機與控制工程學院 * All rights reserved. * 檔名稱:專案1-7.cbp * 作 者:張芸嘉 * 完成日期:2015年12月18日 * 版 本 號
第6周專案3 括號的匹配
問題描述: /* Copyright (c)2015,煙臺大學計算機與控制工程學院 All rights reserved. 檔名稱:專案3.cbp 作 者:張芸嘉 完成日期:2015年10月2
C++第13周專案3——漢諾塔
【專案3-漢諾塔】漢諾塔(又稱河內塔)問題是源於印度一個古老傳說的益智玩具。古代有一個梵塔,塔內有三個座A、B、C,A座上有64個盤子,盤子大小不等,大的在下,小的在上。有一個和尚想把這64個盤子從A座
第11周專案1——二叉樹演算法驗證
問題及程式碼:/* *Copyright(c++)2015,煙臺大學計算機與控制工程學院 *All rights reserved. *檔名稱:CPP1.cpp *作者:宋 晨 *完成
第11周專案1教師兼幹部類
編號及程式碼: /* *Copyright(c)2015,煙臺大學計算機與工程學院 *All rights reserved; *檔名稱:score.cpp *作者:範星月 *完成日期:2015年5月25日 *版本號:v1.0 * *問題描述:定義教師和幹部類,採用多重繼承
第12周專案1 圖基本演算法庫
問題: /* * Copyright (c)2015,煙臺大學計算機與控制工程學院 * All rights reserved. * 檔名稱:專案1.cpp * 作 者:張芸嘉 * 完成日期:2015年11月23日 * 版 本 號:v1.0 * 問題
第9周 專案5-1 程式填充(輸出1000內能被3整除且個位數為6的所有整數)
問題及程式碼:/*。 *Copyright(c)2014,煙臺大學計算機學院 *All right reserved, *檔名:test.cpp *作者:liu_feng_zi_ *完成日期:2014年10月26日 *版本號:v1.0 * 問題描述:輸出1000以內能被3整
2018-2019-1 20165332 《資訊安全系統設計基礎》第6周學習總結
2018-2019-1 20165332 《資訊安全系統設計基礎》第6周學習總結 教材內容總結 一.儲存技術 1,RAM分為靜態RAM和動態RAM 2.DRAM把超單元的內容發回控制器作為響應,行地址i稱為RAS請求,列地址j稱為CAS請求 3.增強的DRAM 快頁模式DRAM 擴充套件
2018-2019-1 20165201 《資訊安全系統設計基礎》第6周學習總結
2018-2019-1 20165201 《資訊安全系統設計基礎》第6周學習總結 內容待完善~~~ 教材學習內容總結 儘量簡單的總結一下本週學習內容 儘量不要抄書,浪費時間 看懂就過,看不懂,學習有心得的記一下 教材學習中的問題和解決過程 (一個模板:我看了這一段文字 (引用文字),有這個問題 (提
計算機程式設計C++(第6周基礎練習)
計算機程式設計C++ MOOC 測試與作業C++基礎練習100題 測試與作業C++基礎練習100題 ##第六週基本練習 本週內容為函式的遞迴以及過載 遞迴計算n! #include "iostream" using n
MOOC北京理工《C語言程式設計(上)》第6周第3題:郵票組合
題目內容: 我們寄信都要貼郵票,在郵局有一些小面值的郵票,通過這些小面值郵票中的一張或幾張的組合,可以滿足不同郵件的不同的郵資。 現在,郵局有4種不同面值的郵票。在每個信封上最多能貼5張郵票,面值可相同,可不同。 輸入格式: 四種郵票的面值。 輸出格式: 用這四