注意:派生類是基類對象,反之不成立
在一定條件下,不同類型的數據之間可以進行類型轉換,如可以將整型數據賦給雙精度型變量。在賦值之前,先把整型數據轉換成雙精度型數據,然后再把它賦給雙精度型變量。這種不同類型數據之間的自動轉換和賦值,稱為賦值兼容。在基類和派生類對象之間也存有賦值兼容關系,基類和派生類對象之間的賦值兼容規則是指在需要基類對象的任何地方,都可以使用其子類對象來代替。
例如,下面聲明兩個類:
class Base //聲明基類Base
{ ... }; class Derived:public Base//聲明基類Base的公有派生類Derived
{ ... };
根據賦值兼容規則,在基類base的對象可以使用的任何地方,都可以用派生類Derived的對象來替代,但只能使用從基類繼承來的成員。具體表現在下面幾個方面:
1.派生類對象可以賦值給基類對象,即用派生類對象中從基類繼承來的數據成員,逐個賦值給基類對象的數據成員。例如
Base b; //定義基類Base的對象b
Derived d; //定義基類Base的公有派生類Derived的對象d
b=d; //用派生類Derived的對象d對基類對象b賦值
2.派生類對象可以初始化基類對象的引用
3.派生類對象的地址可以賦值給指向基類對象的指針。例如
附加:.如果函數的形參是基類對象或基類對象的引用,在調用函數時可以用派生類對象作為實參。
Base b; //定義基類Base的對象b Derived d; //定義基類Base的公有派生類Derived的對象d Base &br=d; //定義基類Base的對象的引用br,並用派生類Derived的對象d對其初始化
3.派生類對象的地址可以賦值給指向基類對象的指針。例如
Derived d; //定義基類Base的公有派生類Derived的對象d Base *bp=&d; //把派生類對象的地址&d賦給指向基類的指針bp,也就是說 //使指向基類對象的指針bp也可以指向派生類對象d
附加:.如果函數的形參是基類對象或基類對象的引用,在調用函數時可以用派生類對象作為實參。