您的位置:首页 > 编程语言 > C语言/C++

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

2017-09-12 16:15 387 查看
由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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: