天天看點

【Effective c++】條款6:若不想使用編譯器自動生成的函數就應該明确拒絕

【Effective c++】條款6:若不想使用編譯器自動生成的函數就應該明确拒絕

地産中介賣的是房子,其使用的中介軟體系統應該有個類用來描述賣掉的房子

但是任何房子都是獨一無二的,不應該存在兩個房子擁有同樣的屬性,是以以下操作不應該正确!

阻止這兩個操作(複制、指派)可以不聲明它們,but自己不聲明,編譯器會自動生成,并且通路權限還是public。沒辦法隻好聲明出來,但是如何組織這兩個操作呢,好吧,把他們的通路權限聲明為private,因為阻止這兩個操作,是以隻聲明,不定義。例如:

<a></a>

結果

1

2

3

<code>del</code><code>5</code><code>.cc: 在函數‘int main()’中:</code>

<code>del</code><code>5</code><code>.cc:</code><code>10:</code><code>3:</code> <code>錯誤: ‘base::base(const base&amp;)’是私有的</code>

<code>del</code><code>5</code><code>.cc:</code><code>18:</code><code>11:</code> <code>錯誤: 在此上下文中</code>

但是問題又來了:如果類中的成員函數或類的友元函數通路咋整,例如:

可以利用繼承來解決例如

這樣,HoemForSale的朋友或成員函數也無力回天了(畢竟父類的函數是private的).

反思

c++ 中的流對象就是采用這樣的原理.

錯誤提示

<code>/usr/include/c++/</code><code>4.6</code><code>/bits/ios_base.h:</code><code>788:</code><code>5:</code> <code>錯誤: ‘std::ios_base::ios_base(const std::ios_base&amp;)’是私有的</code>

本文轉自jihite部落格園部落格,原文連結:http://www.cnblogs.com/kaituorensheng/p/3708157.html,如需轉載請自行聯系原作者

繼續閱讀