C++的继承是类的重要特性。A类继承了B类,我们称B类为基类,也称为父类,A类则相应地被称为派生类或者子类。
下面是一个子类,继承了父类。
cpp文件
FatherClass2:
继承有三种方式
公有继承(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;
};
};
#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;
}
#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();
}
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()