当先锋百科网

首页 1 2 3 4 5 6 7
C++的继承是类的重要特性。A类继承了B类,我们称B类为基类,也称为父类,A类则相应地被称为派生类或者子类。

继承有三种方式

公有继承(public)

公有继承就是将基类的公有成员变为自己的公有成员,基类的保护成员变为自己的保护成员。

私有继承(private)

私有继承是将基类的公有成员和保护成员变成自己的私有成员,而基类的私有成员在派生类里本身就不能访问。

保护继承(protect)

                保护继承是将基类的公有成员和保护成员变成自己的保护成员,而基类的私有成员在派生类里本身就不能访问。

详情可以参照:C++继承

继承的定义格式如下:

 
  class <派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>,…
   {
    <派生类类体>
   };

下面是我学习的例子:

Person类的.h文件

using namespace std;

class Person{
public:                //访问控制符
    int mAge;         //年龄
    string mName;     //名字
    
    Person(int age,string name);    //构造函数
    ~Person();                      //析构函数
    void toString();
private:
    
    void printStr(string str){
        cout<< str<<endl;
    };
};


Person的cpp文件
#include "Person.h"

Person::Person(int age,string name){
    mAge = age;
    mName = name;
    printStr("Person构造函数");
}

Person::~Person(){
    mAge = 0;
//    mName = "";
    printStr("~Person析构函数");
}

void Person::toString(){
    cout<< "年龄:" << mAge<< "||||姓名::"<<mName <<endl;
}

下面是一个子类,继承了父类。

.h文件

#include <iostream>
#include <string>

#include "Person.h"

using namespace std;

class Student:public Person{   //继父类person
    
public:
    string mNum;
    Student(string num,int age,string name);
    ~Student();   
};

cpp文件


#include "Student.h"
Student::Student(string num,int age,string name):Person::Person(age,name){            //调用父类的构造函数
    mNum = num;
    cout<<"Student构造函数"<<endl;
}
Student::~Student(){
    cout<<"~Student析构"<<endl;
}


在main函数里面调用:

int main(int argc, const char * argv[])
{
   Student student("10086",13,"小花");
    student.toString();
    return 0;
}


很容易,但是C++跟JAVA不太一样,C++还有多继承。下面我也写一个多继承的例子:

FatherClass1:

#include <iostream>

using namespace::std;

class FatherClass{
    
public:
    FatherClass(string n);
    ~FatherClass();
    void show();
private:
    string name;
};


FatherClass::FatherClass(string n){
    name = n;

}

FatherClass::~FatherClass(){

}

void FatherClass::show(){
    cout<<"Father1111111>>>show()"<<endl;
}

FatherClass2:

#include <iostream>

using namespace std;
class FatherClass2{
    public :
    FatherClass2(string n);
    ~FatherClass2();
    void show();
private:
    string name;
};

FatherClass2::FatherClass2(string n){
    name = n;
};

FatherClass2::~FatherClass2(){
    
};
void FatherClass2::show(){
    cout<<"Father22222222>>>show()"<<endl;
}


SonClass:


#include "FatherClass.h"
#include "FatherClass2.h"
#include <iostream>

using namespace std;

class SonClass : public FatherClass ,public FatherClass2{
public:
    SonClass(string n);
    ~SonClass();
    void show();
private:
    string a;
};

SonClass::SonClass(string n):FatherClass("第一个"),FatherClass2("aa"){
    
    a = n;
//    cout<< "Son Class onCreate" <<endl;
    
}

SonClass::~SonClass(){
//    cout<< "Son Class release" <<endl;
}

void SonClass::show(){

        FatherClass::show();
        FatherClass2::show();
    
}


在main方法里面调用

int main(int argc, const char * argv[])
{
    SonClass sonClass("儿子");
    sonClass.show();
    
    sonClass.FatherClass::show();
    sonClass.FatherClass2::show();
//    newInstanct();
//    initExtendsClass();
//    initExtends2();
    return 0;
}



输出结果

Father1111111>>>show()
Father22222222>>>show()
Father1111111>>>show()
Father22222222>>>show()