c 自定义实现string类 clear_CC++语言15|类的继承和派生实现代码重用、扩充
在C++中,继承是一个对象自动获取其父对象的所有属性和行为的过程。通过继承,您可以重用,扩展或修改在其他类中定义的属性和行为。通过继承,可以实现函数重写以及多态。
在C++中,继承另一个类的成员的类称为派生类,其成员被继承的类称为基类。 派生类是基类的子类。
继承代表了 is a 关系。例如,哺乳动物是动物,狗是哺乳动物,因此,狗是动物,等等。
C++最强大的功能之一就是派生类的使用。通过其类提供类和对象的更一般的属性和行为,通过派生类来逐步特殊化、具体化,体现出一种层次化的关系。既能达到代码重用,还可添加成员或重写成员函数。继承一般有三种形式1) 实现继承:派生类使用基类的属性和方法而无需额外编码;2) 可视继承:子窗体使用父窗体的外观和实现代码;3) 接口继承:仅使用属性和方法,实现滞后到子类实现;
如C++的输入输出流类就能会很地体现这种继承和派生的层次关系:
定义一个派生类,我们使用一个类派生列表来指定基类。类派生列表以一个或多个基类命名,形式如下:
class derived-class: access-specifier base-class
其中,访问修饰符 access-specifier可以是 public、protected 或 private 其中的一个,base-class 是之前定义过的某个类的名称。如果未使用访问修饰符 access-specifier,则默认为 private。
实例:
#include using namespace std;// 基类class Shape{public:void setWidth(int w){width = w;}void setHeight(int h){height = h;}protected:int width;int height;};// 派生类class Rectangle: public Shape{public:int getArea(){return (width * height);}};int main(void){Rectangle Rect;Rect.setWidth(5);Rect.setHeight(7);// 输出对象的面积cout << "Total area: " << Rect.getArea() << endl;system("pause");return 0;}//输出:Total area: 35
1 访问控制和继承
派生类可以访问基类中所有的非私有成员。因此基类成员如果不想被派生类的成员函数访问,则应在基类中声明为 private。
我们可以根据访问权限总结出不同的访问类型,如下所示:
2 派生类不能继承的函数成员
一个派生类继承了所有的基类方法,但下列情况除外:
- 基类的构造函数、析构函数和拷贝构造函数。
- 基类的重载运算符。
- 基类的友元函数。
用派生的方法定义一个派生类时,派生类对象中的基类部分必须在构造函数的初始化列表中调用基类的构造函数完成,如:
#include
#include
//代码清单12-11 派生类定义实例car派生taxi
class car {
char no[10];
char owner[10];
char type[20];
public:
car(char *s1, char *s2, char *s3)
{
strcpy(no, s1);
strcpy(owner, s2);
strcpy(type, s3);
}
void modifyNo(char *s) {strcpy(no, s); }
void modifyOwner(char *s) {strcpy(owner, s); }
const char *getNo() const { return no; }
const char *getOwner() const {return owner; }
const char *getType() const { return type; }
};
class taxi : public car {
int seat;
double price;
public:
taxi(char *s1, char *s2, char *s3, int s, double p):car(s1,s2,s3)
{seat = s; price = p; }
double operator() (int start, int end)
{ return price *(end-start); }
int getSeat() const {return seat; }
double getPrice() const { return price; }
};
int main()
{
car car1("沪A01100
c 自定义实现string类 clear_CC++语言15|类的继承和派生实现代码重用、扩充相关推荐
- C++ Primer 5th笔记(chap 15 OOP)继承之派生类
1. 构造函数 每个类控制它自己的成员初始化过程:尽管派生类包含了从基类继承而来的成员,但是派生类不能直接初始化这些成员,而是需要使用基类的构造函数来初始化它们. 派生类对象的基类部分与派生类对象自己 ...
- c语言Python语法结构差别,Python语法与类C语言语法的差别
原创声明:本文除了标明引用的内容外,都为本人原创,请尊重本人的知识产权,不能用于商业用途.欢迎转载,转载请在文章开头处插入以下内容: 背景知识 对于有C/C++/Java等类C语言背景的人来说,Pyt ...
- 类的继承和派生java_python 类的继承和派生
面向对象的编程带来的主要好处之一是代码的复用,实现这种复用的方法之一是通过继承机制. python中解决代码复用的方式:继承和组合. 1 什么是继承 继承是一种创建类的方法,在python中,一个类可 ...
- c 自定义实现string类 clear_有关类加载器的总结
对于java开发来说,classLoader往往是容易被我们忽视的一个重要知识点.而classLoader对java的发展也有很大的影响.例如. 早期的applet应用,通过网络远程加载class文件 ...
- C语言自定义实现string字符串的算法(附完整源码)
C语言自定义实现string字符串的算法 string字符串的定义pstring.h(完整源码) string字符串的实现pstring.cpp(完整源码) string字符串的定义pstring.h ...
- JAVA day13,14 API、Object类、日期时间类(long,Date,Calendar,DateFormat)、String类(字符串,可变长字符串)、正则表达式、包装类
1.API API(Application Programming Interface),应⽤程序编程接⼝.Java API是⼀本程序员的"字 典",是JDK提供给我们使⽤的类的说 ...
- 学习String类和日期Date类,看这一篇就够了
写在前面,Java基础系列文章都是作者基于b站尚硅谷的Java基础视频所做的笔记,没有时间的同学可以认真看看,如果有时间的同学,还是建议看看视频,毕竟笔记说到底还是自己的东西,每个人的习惯也是不一样的 ...
- 为什么除了Go语言, 其他类C语言都是垃圾[翻译][转]
2019独角兽企业重金招聘Python工程师标准>>> 英文原文: http://www.syntax-k.de/projekte/go-review 原始翻译: http://ww ...
- 从底层分析c和类c语言
转自:http://blog.csdn.net/jggyyhh/article/details/50429886?locationNum=5&fps=1 要想深入理解C语言就不得不要知道几个知 ...
最新文章
- Go 学习笔记(47)— Go 标准库之 strconv(string/int 互相转换、Parse 字符串转换为指定类型、Format 指定类型格式化为字符串)
- 修改所有列_多人编辑,自动汇总,领导可见所有?用 SeaTable 表格更简单
- 使Git与代理服务器一起使用-因“请求超时”而失败
- silverlight元素FrameworkElement.LayoutUpdated布局变化事件
- WebAPI(part1)--API及DOM
- Hive中的算术运算符:位运算符解释
- 【C语言进阶深度学习记录】十八 条件编译的使用与分析
- monkey基本命令及脚本编写
- (第七天)DOM练习一
- 前端之CSS第二部分属性相关
- mysql 查询表总行数字段_MySQL的count(*)的优化,获取千万级数据表的总行数
- 子组件触发父组件的方法
- 华为交换机和路由器命令和trunk
- SC-Lego-LOAM解析(上)
- day07-python字典
- 软硬结合——写给硬件开发工程师的全栈入门实战
- 虚拟桌面的服务器,虚拟桌面与集合
- 字符串_字符串的复制
- 斑马ZT510打印设置
- 白嫖正版《极客时间》课程的正确姿势
热门文章
- 5 微信公众号开发 获取 access_token
- Apache Nifi 实战:多表导入实现及填坑 GitChat连接
- 18 | 散列表(上):Word文档中的单词拼写检查功能是如何实现的?
- dos安装深度linux,U盘用grub4dos引导Deepin v20 Beta iso安装的方法
- html表单不允许修改,[问题]如何在表单里定义(form)仅仅可读,不可修改的列?
- linux 浏览器 links,linux下的命令行浏览器links
- 七夕秀恩爱新姿势!这波操作我给十分!
- 铃铛计数问题 解题报告
- LeetCode:204. 计数质数
- jquery ajax 数据传输