——C++訪問類別除了private、public,還有protected。
對外部世界來說,保護成員的行為與私有 成員相似。
對於派生類來說,保護成員的行為與公有成員相似。
用於數據成員時的缺陷。
用於成員函數時的優點。
對外部世界。
關鍵字protected與private相似,在類外只能用公有類成員來訪問protected部分中的類成員。
對派生類。
關鍵字protected與public相似,派生類可以直接訪問基類的保護成員。
缺陷。
使用保護數據成員可以簡化代碼的編寫工作(派生類可以直接使用基類的protected數據成員,而數據成員以前通常是private成員,這將需要使用額外的基類公有訪問函數或保護函數來查看或修改基類private數據成員,並且公有訪問函數對外界開放,而protected數據成員只對派生類可見),但存在設計缺陷。
盡管如此,若數據成員是受保護的,類被設計成只能通過成員函數才能修改該數據成員,protected屬性將忽略該保護措施,允許直接訪問,這實際上使protected數據成員成為了公有變量(對派生類而言)。
void BrassPlus::Reset(double amt) { balance = amt; // balance is protected }
因此最好對類數據成員采用私有訪問控制,不要使用保護訪問控制;同時通過基類方法使派生類能夠訪問基類數據。
優點。
對於成員函數來說,保護訪問控制很有用,它讓派生類能夠訪問公眾不能使用的內部函數。
-----