面向对象的三个基本概念:封装 继承 多态

一 定义基类和派生类
1 定义基类 

virtual修饰的函数为虚函数,对虚函数的调用在程序运行时确定
成员函数默认是非虚函数,对非虚函数的调用在编译时确定

除了构造函数以外,任意非static成员函数都可以使虚函数,virtual只在类内部的成员函数声明中出现,不能在类定义体外部出现

在函数定义上。

2 访问控制与继承

用户代码可以访问类的public成员而不能访问类的private成员,private成员只能由基类的成员和友元访问。
protected成员可以被派生类对象访问但不能被该类型的普通成员访问。

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

protected price;//定义于基类
void Bulk_item::memfcn(const Bulk_item &d,const Item_base &b)
{
  double ret=price;//OK this->price
  ret=d.price;//OK 派生类对象
  ret=b.price;//error 基类对象
}

4 派生类  
class classname:access-label base-class
access-label:public private protected

访问标号决定了对继承成员的访问权限,如果想要继承基类的接口,则应该使用public派生

派生类会重新定义所继承的虚函数,如果派生类没有重定义某个虚函数,则使用基类中的版本。


派生类中虚函数的声明必须与基类中的定义方式完全匹配,但是有一个例外:返回对及类型的引用(或指针)的虚函数,派生类中

的虚函数可以返回基类函数所返回类型的派生类型引用(或)指针。

5 用作基类的类必须是已经定义的

6 virtual与其他成员函数
要触发动态绑定需要满足如下两个条件:
1)只有指定为虚函数的成员函数才能进行动态绑定
2)必须通过基类类型的引用或指针进行函数调用

7 引用和指针的静态类型与动态类型可以不同,这是C++可以支持多态性的基础。
静态类型:在编译时可知的引用类型或指针类型
动态类型:指针或引用所绑定的对象的类型,这是仅在运行时可知的

8 对非virtual成员的调用在编译时确定为调用基类的成员。
 非虚函数总是在编译时根据调用该函数的对象、引用或指针的类型而确定。


 posted on 2009-06-15 21:52  清水湾  阅读(217)  评论(0)    收藏  举报