继承的定义方式CLASS Derived_class : PUBLIC Base_class { declarations };,public是对基类的访问标志符,但也可以是protected或private。 继承时,必须先包含基类的声明文件。 在派生类里,可以重载基类里的函数,如果要用基类里的函数,必须在前加作用域符,否则系统认为是在用派生类中重载的函数。 一般来将,当编译器读到一个函数名时,它按照下步骤寻找函数来源:1、在定义成员函数时出现的函数名,编译器首先检查该名称是否在类里进行了声明,如果发现了此声明,就使用这个声明过的函数;2、如果编译器没有在类里找到函数的生命,下一步它将在基类里寻找此函数的声明(依级别进行);3、如果函数名称没在类的派生层次里声明过,编译器将检查它是不是全局函数。 注:如果一个函数在派生类里被重载,这个函数通常被定义为虚函数。 protected访问权限的成员,可以在类的作用域和它的派生类里被读写,但此范围之外受到保护。 基类构造函数:C++总试图调用基类的构造函数来创建新的对象,而如果没指定基类构造函数,编译器就会调用派生类的缺省构造函数。所以,在调用派生类的缺省构造函数之前,派生类里继承基类的成员已经被初始化了一次。而且,如果基类的成员是私有的,则派生类根本无法进行初始化工作,因为它不能读写继承而来的私有成员。解决方法就是在派生类的构造函数里指定合适的基类构造函数,语法格式为:class::class( arglist1 ):base_class( arglist2 ) { statements } ,(arglist2从arglist1里选择合适的参数)这样就只要执行一次初始化。 如果不进行类型转换,C++是不允许把一种类型的指针赋值给另外一种类型的指针的,但允许程序员用基类类型的指针指向派生对象(单向)。此时,如果基类里有个函数被派生类重载,则编译器假设调用的是基类的函数而非派生类的函数。解决方法:虚函数可以作延迟判断,因为这种延迟只可能虚函数接受,虚函数使用了延迟绑定,即在引用函数时并不将其绑定在内存里一个实函数的地址上,而是在运行的时候才决定其准确地址。

评论