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
例如:
视频文件 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
相关文章推荐
- C++学习笔记之继承层次中的函数调用。
- C++ FAQ学习笔记 22章 继承 — 抽象基类(ABCs)
- C++学习笔记:3.3.4 继承和组合混搭情况下,构造和析构调用顺序
- c++入门学习笔记继承
- 【C++】【学习笔记】【028】多继承
- C++学习笔记 lesson12 继承
- C++学习笔记—类6-有关继承的一些东西
- 面向对象与C++程序设计-类的继承与派生学习笔记
- C++学习笔记(继承类)
- C++学习笔记之继承
- C++学习笔记--继承初识
- C++学习笔记13:类继承和派生、虚函数
- c++学习笔记之继承和多态
- 嵌入式开发之C++基础学习笔记4--面向对象封装继承多态
- C++学习笔记25:不能继承的类
- c++学习笔记之继承篇
- C++学习笔记:继承
- C++学习笔记13-类继承
- PKU C++程序设计实习 学习笔记2 继承与派生
- [学习笔记] C++ primer plus 第十三章 类继承