C++学习笔记---类的继承(一)

本文详细介绍了C++中的继承(is-a)关系及其语法表示方法,并深入探讨了子类如何继承父类的public和protected成员。此外,还讲解了通过virtual关键字实现的多态性,使子类能够重写父类的方法。
由C++构成的抽象世界存在is a kind of 的关系
 例如:
 视频文件 VideoFile 是一种 File
 MP4文件 MP4File 是一种视频文件 VideoFile
 
 在C++里,由继承的语法来表示is lind of的关系
 class File
 {
 }
 class VideoFile : public File
 {
 }
 语法:class B : public A{}
 表示类B继承于类A,把A称为父类(基类),把B称为子类(派生类)
 当B继承于A时,则自动地将父类中的所有public成员继承。
 子类只需要把自己的独有的那部分特性写出来
 在描述继承关系时,新增一种访问修饰符protected(受保护的)
 当一个类成员被修饰为protected的时候,有以下规则成立:
 (1)该成员不能被外部访问,同private
 (2)给成员可以被子类继承,同public
 所以,public和protected的成员都能够被子类继承
 在内存上描述父类和子类的关系:子类对象的前半部分就是父类的对象。
父类的private成员变量也会在子类的对象中,只是编译器限制了访问。
 子类可以重写从父类继承而来的函数
 class Parent
 {
public:
void Test();
 }
 class Chlid : public Parent
 {
public:
void Test();
 }
重写函数的时候,可以调用父类的函数,然后加上自己要写的内容
void Child::Test()
{
Parent::Test();//显示地调用父类的函数
]
 将父类的指针指向子类的对象,这样是完全允许的,从语法本质上将,子类对象的前半部就是父类,因而可以将子类对象的指针直接转化为父类。
 例:
 int main()
 {
Child ch;
ch.a=0x11111111;
ch.b=0x22222222;
Parent * p = &ch;
printf("Parent::a=%d\n",p->a);
return 0; 
 }
 将父类的指针指向子类的对象如果有重写的函数时,指针指向的是父类的函数。
 例:Test为重写过的函数
 Parent * p = new Child();
 p->Test();
 此时p指向的是父类的Test();
 
 当一个成员函数需要子类重写,那么在父类应该将其声明为virtual。(有时将声明为virtual的函数称为虚函数)。
 例如:
 class Parent
 {
public:
virtual void Test();
 };
 virtual本身表明该函数即将被子类重写
 例:
 Parent * p = new Child();
 p->Test();
 如果Test()在父类中被声明为virtual,是调用的是子类的Test();
 virtual的作用:根据对象的实际类型,调用相应类型的函数。
 注意:
 (1)只需要在父类中将函数声明为virtual,子类自动地就是virtual了。
 (2)即将被重写的函数添加virtual,是一条应该遵守的编码习惯。
 (3)构造函数不能加virtual
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值