指標和引用是很好理解的,變數的引用相當於給變數取了個別名,在函式呼叫時,傳引用是會將引數列表的值改變的。
#include
using
namespace
std;
int main()
最終輸出的結果都是0x7ffdd9aff7b4,即為記憶體中儲存整型變數m的位址。對於虛函式,它是實現多型公有繼承的關鍵。什麼是多型呢?我們的派生類是可以使用基類的方法的,但是如果只是使用基類的方法,我們是沒有對基類方法作任何修改的,但是我們會遇到這種情況,我們希望乙個方法在基類和派生類中的行為是不一樣的,即方法的行為應取決於呼叫該物件的方法,這就是多型。實現多型有有種重要機制:(1)在派生類中重新定義基類的方法(2)使用虛方法。對於虛函式的介紹,這篇部落格寫的不錯:虛函式,指標和引用
稍帶提到一點,雖然 乙個函式定義為虛函式,那麼無論它傳下多少層,都將保持為虛函式,而不必每次都加關鍵字virtual。但是在實際的過程中加上virtual關鍵字是有必要的,這有有利於**的閱讀
這是乙個c++ primary上簡單的例子,需要開發兩個類,基類brass和派生類brassplus。在派生類中增加了幾個私有資料maxloan、rate和owesbank。我們不必知道這些變數的含義,我們不關心方法的實現,而是更關心多型性。兩個類的定義如下:
#ifndef brass_h
#define brass_h
#include
class brass
};class brassplus:public brass
void resetrate(double r);
void resetowes()
};#endif // brass_h
這裡面我們可以看到函式viewacct() const和withdraw(double amt)都被定義為虛函式。也就是表明這個函式在基類和派生類中的行為是不一樣,它們的實現如下:
#include "brass.h"
#include
using
namespace
std;
typedef ios_base::fmtflags format;
typedef streamsize precis;
format setformat();
void restore(format f,precis p);
brass::brass(const
string & s ,long an,double bal)
void brass::deposit(double amt)
void brass::withdraw(double amt)
double brass::balance() const
void brass::viewacct() const
brassplus::brassplus(const brass &ba, double ml, double r):brass(ba)
void brassplus::viewacct() const
void brassplus::withdraw(double amt)
format setformat()
void restore(format f, precis p)
這裡我們可以看到在定義viewacct()中,使用到了作用域解析運算子,假設在brassplus中定義viewacct()沒有用作用域解析運算子會怎麼樣呢?
void brassplus::viewacct() const
這樣會導致乙個問題,這裡會預設呼叫的是brassplus::viewacct(),這樣就會變成乙個遞迴呼叫,是乙個不會終止的函式。
在我們的主函式中呼叫viewacct()方法和withdraw()方法時,則不用顯示的呼叫,編譯器會根據你定義的對像確定自己的行為。下面就是乙個例子:
#include
#include"brass.h"
using
namespace
std;
int main()
上面是通過物件呼叫的,而不是通過指標或引用,沒有使用虛方法的特性。由於使用的是公有繼承模型,因此brass指標既可以指向brass物件,也可以指向brassplus物件。所以可以使用乙個陣列來表示多種型別的物件,這就是多型性(隱士的強制轉換)。**如下:
#include
#include"brass.h"
#include
using
namespace
std;
const
int clients = 4;
int main()
while(cin.get()!='\n')
continue;
}cout
}cout
<<"done.\n";
return
0;}
C 繼承 多型 虛函式
c 支援多繼承 class parent class parent2 class child public parent,private parent2公有繼承和私有繼承的區別 public parent 公有繼承,private和public都會繼承 private parent 私有繼承,只繼承...
C 繼承 多型 虛函式 抽象
一 繼承 1 如果你以乙個 基類指標 指向 派生類物件 那麼經由該指標你只能呼叫基類所定義的函式 2 如果你以乙個 派生類指標 指向乙個 基類指標 你必須先做明顯的轉型操作。3 如果基類和派生類都定義了相同名稱的成員函式,那麼通過物件指標呼叫成員函式是,到底呼叫到那乙個函式,必須視該指標的原始型別而...
繼承 虛函式和多型小結
一.知識點總結 繼承 1.定義 在已有類的基礎上建立新類的過程。乙個 b 類繼承 a類,或稱從類 a 派生類 b類 a 稱為基類 父類 類 b 稱為派生類 子類 2.類繼承關係的語法形式 class 派生類名 基類名錶 資料成員和成員函式宣告 基類名錶 構成訪問控制 基類名1,訪問控制 基類名 2 ...