正在阅读:图例实解:C++中类的继承特性图例实解:C++中类的继承特性

2005-03-15 10:15 出处:PConline 作者:管宁 责任编辑:xietaoming

  一旦成功定义派生类,那么派生类就可以操作基类的所有数据成员包括是受保护型的,上面代码中的a.EditSC(100,4); 就是例子,甚至我们可以在构造派生类对象的时候初始化他们,但我们是不推荐这么做的,因为类于类之间的操作是通过接口进行勾通的,为了不破坏类的这种封专装特性,即使是父类于子类的操作也应按遵循这个思想,这么做的好处也是显而易见的,当基类有错的时候,只要不涉及接口,那么基类的修改就不会影响到派生类的操作。

  至于为什么派生类能够对基类成员进行操作,我们上图可以简单的说明基类与子类在内存中的排列状态。

  我们知道,类对象操作的时候在内部构造的时候会有一个隐的this指针,由于Car类是Vehicle的派生类,那么当Car对象创建的时候,这个this指针就会覆盖到Vehicle类的范围,所以派生类能够对基类成员进行操作。

  笔者写到这里的时候不得不提一下,我有开发c#与java的经验,就这两种语言来说,学到这里的时候很多人很难理解继承这一部分的内容,或者是理解的模糊不清,其实正是缺少了与this指针相关的c++知识,多数高级语言的特性是不涉及内存状态的操作,java与c#是接触不到这些知识的,所以理解起这部分内容就更抽象更不具体。

  下面我们来说一下,派生类对象(子类对象)的构造

  由上面的例程我们知道Car类是Vehicle类的派生类(子类),c++规定,创建派生类对象的时候首先调用基类的构造函数初始化基类成员,随后才调用派生类构造函数

  但是要注意的是,在创建派生类对象之前,系统首先确定派生类对象的覆盖范围(也可以称做大小尺寸),上面代码的派生类对象a就覆盖于Vehicle类和Car类上,至于派生类对象的创建是如何构造基类成员的,我们看如下代码,随后再进行分析:

#include <iostream>   
using namespace std; 
 
class Vehicle 

public
    Vehicle(float speed=0,int total=0) 
    { 
        cout<<"载入Vehicle类构造函数"<<endl; 
        Vehicle::speed = speed; 
        Vehicle::total = total; 
    } 
    Vehicle(Vehicle &temp) 
    { 
        Vehicle::speed = temp.speed; 
        Vehicle::total = temp.total; 
    } 
    ~Vehicle() 
    { 
        cout<<"载入Vehicle类析构函数"<<endl; 
        cin.get(); 
    } 
protected
    float speed;//速度 
    int total;//最大载人量 
}; 
class Car:public Vehicle 

public
    Car(float aird=0,float speed = 0,int total = 0):Vehicle(speed,total) 
    { 
        cout<<"载入Car类构造函数"<<endl; 
        Car::aird = aird; 
    } 
    Car(Car &temp):Vehicle(temp.speed,temp.total) 
    { 
        cout<<"载入Car类拷贝构造函数"<<endl; 
        Car::aird = temp.aird; 
    } 
    ~Car() 
    { 
        cout<<"载入Car类析构函数"<<endl; 
        cin.get(); 
    } 
protected
    float aird;//排量 
}; 
void main() 

    Car a(250,150,4); 
    Car b = a; 
    cin.get(); 
}

  对象a创建的时候通过Car(float aird = 0,float speed = 0,int total = 0):Vehicle(speed,total),也就是Car类构造函数,来构造Car类对象成员,但按照c++的规定首先应该调用基类构造函数构造基成员,在这里基类成员的构造是通过Vehicle(speed,total),来实现的。

键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品