1. 在C++中,通过基类的引用(或指针)调用虚函数时,发生动态绑定。引用(或指针)既可以指向基类对象也可以指向派生类对象,这一事实是动态绑定的关键。用引用(或指针)调用的虚函数在运行时确定,被调用的函数是引用(或指针)所指对象的实际类型所定义的。

  2. 派生类只能通过派生类对象访问其基类的 protected 成员,派生类对其基类类型对象的 protected 成员没有特殊访问权限。

    例如,假定 Bulk_item 定义了一个成员函数,接受一个 Bulk_item 对象的引用和一个 Item_base 对象的引用,该函数可以访问自己对象的 protected 成员以及 Bulk_item 形参的 protected 成员,但是,它不能访问 Item_base 形参的 protected 成员。

         void Bulk_item::memfcn(const Bulk_item &d, const Item_base &b)
         {
             // attempt to use protected member
             double ret = price;   // ok: uses this->price
             ret = d.price; // ok: uses price from a Bulk_item object
             ret = b.price; // error: no access to price from an Item_base
         }
  3. 一旦函数在基类中声明为虚函数,它就一直为虚函数,派生类无法改变该函数为虚函数这一事实。派生类重定义虚函数时,可以使用 virtual 保留字,但不是必须这样做。

  4. 已定义的类才可以用作基类。如果已经声明了 Item_base 类,但没有定义它,则不能用 Item_base 作基类

  5. 如果需要声明(但并不实现)一个派生类,则声明包含类名但不包含派生列表。例如,下面的前向声明会导致编译时错误:

  6.      // error: a forward declaration must not include the derivation list
         class Bulk_item : public Item_base;

    正确的前向声明为:

         // forward declarations of both derived and nonderived class
         class Bulk_item;
         class Item_base;
    
posted on 2010-06-23 16:20  cppfans  阅读(101)  评论(0编辑  收藏  举报