Abstract class其實就像是一個interface , 通常是用來做為其他class的base class , 

在C++中 , Abstract class至少要包含一個pure virtual function .

class AB {
public:
  virtual void f() = 0;
};

因為Abstract class是存在著一些pure virtual function , 

且這些pure virtual function在abstract class裡面是沒有define內容的.

所以我們可以很直覺的想到 , 這樣的abstract class是沒有辦法instantize.

也就是說 , 我們不能將他做為parameter type , function return type , or the type of an explicit conversion.

對於abstract class , 我們只能使用pointer or reference , 因為這兩個並不會產生一個object.

 

struct A {
  virtual void f() = 0;
};

struct B : A {
  virtual void f() { }
};

// Error:
// Class A is an abstract class
// A g();

// Error:
// Class A is an abstract class
// void h(A);
A& i(A&);

int main() {

// Error:
// Class A is an abstract class
//  A a;

   A* pa;
   B b;

// Error:
// Class A is an abstract class
//   static_cast<A>(b);
}

ref : http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8l.doc%2Flanguage%2Fref%2Fcplr142.htm

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 JerryCheng 的頭像
    JerryCheng

    KwCheng's blog

    JerryCheng 發表在 痞客邦 留言(0) 人氣()