继承允许我们根据一个类来定义另一个类,达到了代码功能重用效果。
当创建一个类时,如果待创建的类与另一个类存在某些共同特征,不需要全部重新编写成员变量和成员函数,只需指定继承另一个类即可,被继承的类称为基类或父类,新建的类称为派生类或子类。
定义一个派生类,需要指定它的基类
class 派生类名:继承方式 基类名
举例:
#include"/root/public.h"
class Cbookname
{
public:
int m_hd;
char m_name[50];
char m_actor[50];
int show()
{
printf("显示信息hd=%d,name=%s,actor=%s\n",m_hd,m_name,m_actor);
}
};
class Chaha:public Cbookname //继承
{
public:
int m_money;
char m_ch[50];
char m_sc[50];
int show() //如果子类里面没有show函数,就会调用父类的
{
printf("显示信息name=%s,actor=%s,money=%d,m_ch=%s,m_sc=%s\n",m_name,m_actor,m_money,m_ch,m_sc);
}
};
int main()
{
Chaha BOOK;
strcpy(BOOK.m_name,"爱的教育");
strcpy(BOOK.m_actor,"思考快与慢");
BOOK.m_hd=18;
strcpy(BOOK.m_ch,"漂亮");
BOOK.m_money=1000;
strcpy(BOOK.m_sc,"好");
BOOK.show();
return 0;
}
示信息name=爱的教育,actor=思考快与慢,money=1000,m_ch=漂亮,m_sc=好
类的继承方式
)公有继承(public):当类派生以public方式继承时,基类的公有成员也是派生类的公有成员,基类的保护成员也是派生类的保护成员,基类的私有成员不能直接被派生类访问,但是可以通过调用基类的公有和保护成员来访问。
2)保护继承(protected): 当类派生以protected方式继承时,基类的公有和保护成员将成为派生类的保护成员。
3)私有继承(private):当类派生以private方式继承时,基类的公有和保护成员将成为派生类的私有成员
基类和派生类指针
基类的指针可以指向基类对象,也可以指向派生类对象,但是不能通过基类的指针访问派生类的成员。
测试:
Cbookname *ip1=new Chaha;
//Chaha *ip2=new Chaha;
// Chaha BOOK;
strcpy(ip1->m_name,"爱的教育");
strcpy(ip1->m_actor,"思考快与慢");
ip1->m_hd=18;
strcpy(ip1->m_ch,"漂亮");
ip1->m_money=1000;
strcpy(ip1->m_sc,"好");
ip1->show();
delete ip1;
基类的指针指向派生类时可以访问基类的成员,不能访问派生类成员。
8.cpp: 在函数‘int main()’中:
18.cpp:39:16: 错误:‘class Cbookname’没有名为‘m_ch’的成员
strcpy(ip1->m_ch,"漂亮");
^
18.cpp:40:9: 错误:‘class Cbookname’没有名为‘m_money’的成员
ip1->m_money=1000;
^
18.cpp:41:16: 错误:‘class Cbookname’没有名为‘m_sc’的成员
strcpy(ip1->m_sc,"好");
派生类的指针可以指向派生类对象,但不可以指向基类对象。
测试:
派生类指向派生类的指针,可以访问派生类和基类的成员。
Chaha *ip2=new Chaha;
// Chaha BOOK;
strcpy(ip2->m_name,"爱的教育");
strcpy(ip2->m_actor,"思考快与慢");
ip2->m_hd=18;
strcpy(ip2->m_ch,"漂亮");
ip2->m_money=1000;
strcpy(ip2->m_sc,"好");
ip2->show();
delete ip2;
显示信息name=爱的教育,actor=思考快与慢,money=1000,m_ch=漂亮,m_sc=好
派生类的指针不能指向基类的对象
Chaha *ip2=new Cbookname;
.cpp:33:19: 错误:从类型‘Cbookname*’到类型‘Chaha*’的转换无效 [-fpermissive]
Chaha *ip2=new Cbookname;
多继承
多继承即一个派生类可以有多个基类,它继承了多个基类的特性。
C++ 类可以从多个基类继承成员,
定义:
class 派生类:继承方式 基类名,继承方式 基类名,继承方式 基类名
其中,继承方式是 public、protected 或 private 其中的一个,用来修饰每个基类,各个基类之间用逗号分隔。
#include"/root/public.h"
class Cbookname
{
public:
int m_hd;
char m_name[50];
char m_actor[50];
};
class Chaha
{
public:
int m_money;
char m_ch[50];
char m_sc[50];
};
class Cch:public Cbookname,public Chaha
{
public:
char ii[50];
int show()
{
printf("显示信息name=%s,actor=%s,money=%d,m_ch=%s,m_sc=%s,ii=%s\n",\
m_name,m_actor,m_money,m_ch,m_sc,ii);
}
};
int main()
{
//Cbookname *ip1=new Chaha;
Cch *ip2=new Cch;
// Chaha BOOK;
strcpy(ip2->m_name,"爱的教育");
strcpy(ip2->m_actor,"思考快与慢");
ip2->m_hd=18;
strcpy(ip2->m_ch,"漂亮");
ip2->m_money=1000;
strcpy(ip2->m_sc,"好");
strcpy(ip2->ii,"类的多继承");
ip2->show();
delete ip2;
//delete ip2;
return 0;
显示信息name=爱的教育,actor=思考快与慢,money=1000,m_ch=漂亮,m_sc=好,ii=类的多继承