1樓:匿名使用者
一、類包含物件
這種關係的實現無非就是一個類是另外一個類的成員而已。
class a
其實這就是一個最簡單的has-a的關係的實現。
二.、私有繼承
c++還有另一種實現has-a關係的途徑----私有繼承。使用私有繼承,基類的公有成員和保護成員都將成為派生類的私有成員。這意味著基類方法將不會成為派生物件公有介面的一部分,但可以在派生類的成員函式中使用它們。
使用公有繼承,基類的公有方法將成為派生類的公有方法。簡而言之,派生類將繼承基類的介面,這是is-a關係的一部分。使用私有繼承,基類的公有方法將成為派生類的私有方法。
簡而言之,派生類不能繼承基類的介面。正如從被包含物件中看到的,這種不完全繼承是has-a關係的一部分。
因此私有繼承提供的特性與包含相同:獲得實現,但不獲得介面。所以,私有繼承也可以用來實現has-a關係。
三、使用包含還是私有繼承
由於既可以使用包含,也可以使用私有繼承來建立has-a關係。大多數c++程式設計師傾向於前者。不過私有繼承所提供的特性確實比包含多。
例如,假設類包含保護成員,則這樣的成員在派生類中是可用的,但在繼承層次機構外是不可用的。如果使用組合獎這樣的類保護在另一類中,則後者將不是排成類,而是位於繼承層次結構之外,因此不能訪問保護成員。但通過繼承的到的將是派生類,因此他能夠訪問保護成員。
另一種需要使用私有繼承的情況是需要重新定義虛擬函式。派生類可以重新定義虛擬函式,但包含類不能。使用私有繼承,重新定義的函式將只能在類中使用,而不是公有的。
c++程式設計判斷奇偶性
2樓:
把輸入引數從int改為float或者double試試,因為int只記錄整數位,小數位會根據環境設定(沒改過就是預設的)抹掉或者升降(直接加1或者四捨五入,不確定)。
3樓:匿名使用者
解法一:用函式過載做
#include
using namespace std;
void fun(int f)
i++;
}while(a[i-1]!='\n');
if(!error)
return 0;}
4樓:匿名使用者
這個你用c++裡的函式模板試試...最然有點複雜!或者就用所謂的陣列儲存
5樓:千鋒教育
#include
using namespace std;
int main()
c++ has-a關係包含 包含類成員和私有繼承,還是隻是私有繼承,求解謝謝
6樓:匿名使用者
has-a是一種類與類之間的關係,a類的元件有b,這種關係稱為has-a,即可以使用包含,也可以使用私有繼承,兩者還是有區別的,包含不屬於類繼承,所謂的has-a,is-a等,其實都是用來描述類和類之間的關係的,一般就叫類組合,因為類屬於自定義資料,所以跟內建的型別int等型別在處理上有其複雜的機制
7樓:匿名使用者
has-a沒有任何繼承關係
is-a 為何用來表示繼承關係呢?它的全稱是什麼?
8樓:匿名使用者
is-a從字面上看就表示"是一個"的意思,根據繼承的特性一個派生類物件可以看成是一個基類物件,也就是說一個派生類物件"是一個"基類物件,所以這種名稱符合對這種特性的概括。它沒有所謂的全稱,這是一種約定俗成的說法。與此對應還有一種類與的類的關係叫has-a,表示"有一個",這種關係就是組成關係,指的是一個類將另一個類的物件作為自己的資料成員。
c語言程式設計中的小問題,C語言程式設計的小問題
1 可以的。a int a 100 0.5 將第三位小數加上去,通過強制型別轉換,則會丟棄小數部分 a a 100 由於a是double型別,故商包含2位小數 a int a 100 0.5 100.0 這樣合併會得到相同的結果。2 可以這樣操作。a int a 100 100.0 問題一 可以寫成...
C語言問題,怎麼修改一下程式設計,在C語言程式設計中應該注意哪些問題
您好!很高興為您解答。如果僅僅是從改正 錯誤這一角度看,有如下問題 1 語句 scanf c c c1,c2 的位置上換成 2 語句 d c1 c2 後面缺少 不過也可能是lz的貼上出了問題 3 vc中 不知您是不是 呼叫函式 getch 是要加標頭檔案的 include 下面是修改後的 inclu...
C語言程式設計中的 i和i 有什麼區別
i 和i 的區別 1 運算方式 i 屬於自增運算,相當於i i 1 i 屬於自減運算,相當於i i 1 2 值的變化 假設i 10,分別執行i i 後 i 後 i i 1 10 1 11 i 後 i i 1 9。擴充套件資料 無論i 還是i 這兩個公式既可以單獨存在,也可以賦值給另外的變數。當賦值引...