程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> effective C++ 讀書筆記 條款12與條款13

effective C++ 讀書筆記 條款12與條款13

編輯:C++入門知識

effective C++ 讀書筆記 條款12與條款13


條款12:確定你的public繼承塑膜出is-a關系:

這個條款主要將了一些特殊情況:比如企鵝是鳥,企鵝可以繼承於鳥,但是鳥會飛,企鵝卻不能飛;還有讓正方形繼承矩形可能也會造成這種尴尬!

這個問題以前想過,但是不知道怎麼解決,如果現實生活當中確實要這麼使用:比如 貓 狗 魚 豬等等許多動物繼承Animal類,但是貓狗等不會游泳,

假如這裡是有很多動物,不能采用魚裡面專門加一個方法! 這個現在還沒想出來,條款12也沒有講如果要這麼用該怎麼處理就是將要避免這樣。

is - a;

在面向對象程序設計裡面,ia - a指的是類的父子繼承關系;

public繼承就意味著 is - a ,適用於base - class 身上的每一件事情也一定適應於derived class身上。因此每一個子類對象也是一個父類對象。

條款13:避免遮掩繼承而來的名稱:

這個條款主要講了遮掩繼承,其實也就是我們經常說的 重載 重寫(覆蓋) 隱藏;下面就看一下 重載 重寫 隱藏的區別:

1、重載的特征:在同一個類中;函數名字相同;參數不同;virtual 關鍵字可有可無。
2、重寫(覆蓋)特征是:分別位於派生類與基類;函數名字相同;參數相同;基類函數必須有virtual 關鍵字(這點非常要注意)。

關於隱藏:


1、如果派生類的函數與基類的函數同名,但是參數不同。此時,不論有無virtual關鍵字,基類的函數將被隱藏(注意別與重載混淆)。
2、 如果派生類的函數與基類的函數同名,並且參數也相同,但是基類函數沒有virtual關鍵字。此時,基類的函數被隱藏(注意別與重寫混淆)。

// 06.cpp : 定義控制台應用程序的入口點。
//
/************************************************************************/
/* 目的:找出重載、重寫、隱藏的區別
	時間:2014年12月1日 19:06:03
*/
/************************************************************************/

#include "stdafx.h"
#include 
using namespace std;


class Base
{
private:
	int x;
public:
	virtual void mf1() = 0;
	virtual void mf1(int) //重載,在同一個類當中或者說同一個工作區間內。
	{
		cout<<"調用基類的mf1函數"<


上面的代碼應該很好的解釋了三者的區別;在條款33裡面說道如果不想子類隱藏父類的函數,那麼在子類當中用using 聲明式達到目標:

class Derived:public Base
{
public:
	
	virtual void mf1()
	{
		cout<<"調用子類的mf1函數"<





  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved