1. 程式人生 > >C++第6周專案1

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語言程式設計(上)》63題:郵票組合

題目內容: 我們寄信都要貼郵票,在郵局有一些小面值的郵票,通過這些小面值郵票中的一張或幾張的組合,可以滿足不同郵件的不同的郵資。 現在,郵局有4種不同面值的郵票。在每個信封上最多能貼5張郵票,面值可相同,可不同。 輸入格式: 四種郵票的面值。 輸出格式: 用這四