class
BaseClass{
public:
virtual void Display( ) { cout 100 "\n"; }
};
class
DerivedClass:
public
BaseClass{
public:
virtual void Display( ) { cout 200 "\n"; }
};
void Print(BaseClass* pbc){ pbc->Display( ); }
int
main(
)
{
BaseClass*
pbc
=
new
BaseClass;
DerivedClass*
pdc
=
new
DerivedClass;
Print(pbc);//
显
示
100
Print(pdc);//
显
示
200
return
0;
}
V-table
(Virtual
function
table)
当 C++程式呼叫非虚函数, 采用与 C 程式呼叫函数所用方式一样的
静态绑定来呼叫函数. 但是 C++程式若是透过指向类别的指针来呼
叫虚函数时, 编译程式则采用所谓的晚期绑定(late binding)或静态
绑 定
(static binding) 技 术 来 呼 叫 函 数 .
而 C++虚函数用虚函数表(virtual function table), 或称 V-表来实作
动态绑定, 所谓的 V-表是一个函数指针的阵列, 这是编译程序替每个
使
用
虚
函
数
的
类
所
建
制
的
。
纯
虚
函
数
(pure virtual function)
一个不仅可被重新定义, 而且必须被重新定义的成员函数就称为纯虚
函数,
你只要指定函数一个零值 (更有效说法是一个空指针),就可将虚
成 员 函 数 转 为 纯 虚 成 员 函 数 , 如 以 下 所 示
virtual
void
PrintData()
=
0;
抽
象
类
(abstract
class)
当一个类含有至少一个纯虚函数时, 此类就称为抽象类,而你无法以此
类
来
衍
生
建
立
对
象
.
五
、
C++
template
classes
一
般
的
声
明
及
使
用
class
Collection{
…
int
A[10];
}
Collection
object;
模
板
的
声
明
及
使
用
template
class
T>
//
注
意
这
里
class
Collection{
…