第二章继承与派生

这节课,我们来学习继承。

专注于为中小企业提供做网站、成都做网站服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业察哈尔右翼中旗免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了1000多家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。

当从基类派生出新类时,可以对派生类作如下几个变化:

1、可以增加新的成员函数。

2、可以增加新的成员变量。

3、可以重新定义已有的成员函数。

4、可以改变现有的成员属性。

我们先来学习一个简单的派生例子

//这是一个简单的派生例子

首先,创建一个Location类

Location.h文件如下:

#include 
using namespace std;
class Location
{
private:
    int iPointX;
                                                                                                                                                                                                                                                                                                                   
public:
    void setPointX(int _iPointX)
    {
        iPointX = _iPointX;
    }
    void showX()
    {
        cout<<"X="<

再创建一个Rectangle类

Rectangle.h文件如下:

#include 
#include "Location.h"
//此处可以不写因为可以继承
//using namespace std;
class Rectangle:public Location
{
private:
    int iHight;
                                                                                                                                                                                                                                                                                          
public:
    void setHight(int _iHight)
    {
        iHight = _iHight;
    }
    void showH()
    {
        cout<<"H = "<

main函数如下:

#include "Rectangle.h"
int main(int argc, const char * argv[])
{
    Rectangle rect;
    rect.setPointX(10);
    rect.setHight(20);
                                                                                                                                                                                                                                                                                      
    rect.showX();
     rect.showH();
                                                                                                                                                                                                                                                                                       
    return 0;
}

代码下载:http://pan.baidu.com/share/link?shareid=2883935448&uk=3189484501

访问规则

私有派生例子:

#include

usingnamespacestd;

//程序分析:

//在这个例子中,基类的公有成员iVarA通过私有派生成了派生类的私有成员,所以当Derived类再派生其子类时,iVarA是不可访问的。

//由于私有派生这个特点,因此在实际工作中私有派生很少使用。

class Base
{
public:
int iVarA;
    Base()
    {
iVarA = 10;
    }
};
class Derived:private Base
{
public:
int iVarC;
    Derived()
    {
iVarC = 30;
    }
void show()
    {
cout<

代码下载: http://pan.baidu.com/share/link?shareid=3533495783&uk=3189484501

保护派生

#include 
using namespace std;
//程序分析:
//在保护派生中,基类的私有和不可访问成员在派生类中是不可访问的成员在派生类中是不可访问的,基类的保护成员继续是保护的,而基类的公有成员在派生类中则变为保护的。
class Base
{
                                                                                                                                                                                                       
                                                                                                                                                                                                       
public:
    int iVarA;
    Base()
    {
        iVarA = 10;
    }
};
class Derived:protected Base
{
                                                                                                                                                                                                       
public:
    int iVarC;
    Derived()
    {
        iVarC = 30;
    }
    void show()
    {
        cout<

下载地址:http://pan.baidu.com/share/link?shareid=792966415&uk=3189484501

多重继承例子

#include 
//类C是从类A和类B中共同派生出来的。类C从类A公有派生,因此,类A的中公有函数setA和showA在类C中都是公有。
//类C从类B中私有派生,所以类B中的公有函数,在类C中就是私有的。
using namespace std;
class A
{
private:
    int iVarA;
                                                                                                                                                                                          
                                                                                                                                                                                          
public:
    void setA(int _iVarA)
    {
        iVarA = _iVarA;
    }
    void showA()
    {
        cout<<"iVarA:"<

多重继承中构造函数和析构函数的调用顺序

#include 
using namespace std;
class A
{
protected:
    int iVarA;
                                                                                                                                                                     
public:
    A(int _iVarA)
    {
        iVarA = _iVarA;
        cout<<"Construction A,iVarA = "<

代码下载: http://pan.baidu.com/share/link?shareid=1098289671&uk=3189484501

多重继承中的二义性

#include 
using namespace std;
class A
{
                                                                             
public:
    void Show()
    {
        cout<<"A"<

代码下载:   http://pan.baidu.com/share/link?shareid=1143818360&uk=3189484501

多层继承的二义性

#include 
using namespace std;
//多层继承: 如果一个派生类从多个基类中派生,并且这些基类又有一个共同的基类,则在这个派生类中访问这个共同的基类中的成员时可能出现二义性。
class Base
{
                                                  
public:
    int iBaseData;
                                                  
};
class A:public Base
{
                                                  
public:
    int iAData;
};
class B:public Base
{
                                                  
public:
    int iBData;
};
class Object:public A,public B
{
                                                  
public:
    int iObjectData;
};
int main(int argc, const char * argv[])
{
    Object obj;
    obj.A::iBaseData = 10;
    obj.B::iBaseData = 20;
    cout<<"obj.A::iBaseData = "<http://cdiso.cn/article/jjcdjs.html
        

其他资讯