上一篇文章我把自己写成了一个类,但是谈到继承这个问题以我这个类不好解释,于是我写了一个Book类和他的两个派生类MiniBook和BigBook,用这个实例向你展示继承以及多态的问题。
1.先聊继承,简单看一下运行结果及工程框架


完整代码:
book.h

#ifndef __BOOK_H__
#define __BOOK_H__#include<iostream>
namespace paper {class Book{public:Book(){number = 100;material = "paper";classification = "Development";}~Book(){}void set_number(int n);//设置页数void set_material(std::string m);//设置材质void set_classification(std::string c);//设置类别int get_number();//获取页数std::string get_material();//获取材质std::string get_classification();//获取类别void self_introduction();//这个类可以自我介绍private:int number;//页数std::string material;//材质std::string classification;//类别};
}#endif

book.cpp

#include<iostream>
#include<G:/program/vs2015/classdemo2/book.h>
namespace paper{void Book::set_number(int n) {number = n;}void Book::set_material(std::string m){material = m;}void Book::set_classification(std::string c){classification = c;}int Book::get_number(){return number;}std::string Book::get_material(){return material;}std::string Book::get_classification(){return classification;}void Book::self_introduction(){std::cout << "I am a book...(*_*)" << std::endl;std::cout << "My number:" << get_number() << std::endl;char my_material_char[100];int i;for (i = 0; i < get_material().length(); i++){my_material_char[i] = get_material()[i];}my_material_char[i] = '\0';std::cout << "My material:" << my_material_char << std::endl;char my_classification_char[100];int j;for (j = 0; j < get_classification().length(); j++){my_classification_char[j] = get_classification()[j];}my_classification_char[j] = '\0';std::cout << "My classification:" << my_classification_char << std::endl;}}

minibook.h

//派生类minibook
#ifndef __MINIBOOK_H__
#define __MINIBOOK_H__#include<iostream>
#include<G:/program/vs2015/classdemo2/book.h>
namespace paper {class MiniBook :public Book {public:MiniBook(){book_size = 1;}~MiniBook() {}void set_book_size(int s);int get_book_size();private:int book_size;};
}
#endif

minibook.cpp

#include<iostream>
#include<G:/program/vs2015/classdemo2/minibook.h>
namespace paper {void MiniBook::set_book_size(int s){book_size = s;}int MiniBook::get_book_size(){return book_size;}
}

main.cpp

#include<iostream>
#include<G:/program/vs2015/classdemo2/minibook.h>
int main(int argv, char* argc[])
{//栈创建paper::MiniBook minibook;minibook.set_number(10);minibook.set_material("iron");//设置minibook的材质为钢铁minibook.set_classification("scientific");//设置minibook的分类为科学的minibook.set_book_size(1);std::cout << "minibook book_size:" << minibook.get_book_size() << std::endl;minibook.self_introduction();//书的自我介绍继承于父类
}

2.多态是什么?用自己的话表述就是父类中的同一个函数在不同子类中实现的功能不同。函数名前面加个virtual,虚函数。


完整代码:
book.h

#ifndef __BOOK_H__
#define __BOOK_H__#include<iostream>
namespace paper {class Book{public:Book(){number = 100;material = "paper";classification = "Development";}~Book(){}void set_number(int n);//设置页数void set_material(std::string m);//设置材质void set_classification(std::string c);//设置类别int get_number();//获取页数std::string get_material();//获取材质std::string get_classification();//获取类别virtual void self_introduction();//这个类可以自我介绍,实现多态virtual,虚函数private:int number;//页数std::string material;//材质std::string classification;//类别};
}#endif

book.cpp

#include<iostream>
#include<G:/program/vs2015/classdemo2/book.h>
namespace paper{void Book::set_number(int n) {number = n;}void Book::set_material(std::string m){material = m;}void Book::set_classification(std::string c){classification = c;}int Book::get_number(){return number;}std::string Book::get_material(){return material;}std::string Book::get_classification(){return classification;}void Book::self_introduction(){std::cout << "I am a book...(*_*)" << std::endl;std::cout << "My number:" << get_number() << std::endl;char my_material_char[100];int i;for (i = 0; i < get_material().length(); i++){my_material_char[i] = get_material()[i];}my_material_char[i] = '\0';std::cout << "My material:" << my_material_char << std::endl;char my_classification_char[100];int j;for (j = 0; j < get_classification().length(); j++){my_classification_char[j] = get_classification()[j];}my_classification_char[j] = '\0';std::cout << "My classification:" << my_classification_char << std::endl;}
}

bigbook.h

//派生类bigbook
#ifndef __BIGBOOK_H__
#define __BIGBOOK_H__#include<iostream>
#include<G:/program/vs2015/classdemo2/book.h>
namespace paper {class BigBook :public Book {public:BigBook(){book_size = 1;}~BigBook(){}void set_book_size(int s);int get_book_size();virtual void self_introduction(){std::cout << "I am bigbook(o_o)" << std::endl;}private:int book_size;};
}
#endif

bigbook.cpp

#include<iostream>
#include<G:/program/vs2015/classdemo2/bigbook.h>
namespace paper {void BigBook::set_book_size(int s){book_size = s;}int BigBook::get_book_size(){return book_size;}
}

minibook.h

//派生类minibook
#ifndef __MINIBOOK_H__
#define __MINIBOOK_H__#include<iostream>
#include<G:/program/vs2015/classdemo2/book.h>
namespace paper {class MiniBook :public Book {public:MiniBook(){book_size = 1;}~MiniBook() {}void set_book_size(int s);int get_book_size();virtual void self_introduction(){std::cout << "I am minibook(0_0)" << std::endl;}private:int book_size;};
}
#endif

minibook.cpp

#include<iostream>
#include<G:/program/vs2015/classdemo2/minibook.h>
namespace paper {void MiniBook::set_book_size(int s){book_size = s;}int MiniBook::get_book_size(){return book_size;}
}

main.cpp

#include<iostream>
#include<G:/program/vs2015/classdemo2/book.h>
#include<G:/program/vs2015/classdemo2/bigbook.h>
#include<G:/program/vs2015/classdemo2/minibook.h>
int main(int argv, char* argc[])
{栈创建//paper::MiniBook minibook;//minibook.set_number(10);//minibook.set_material("iron");//设置minibook的材质为钢铁//minibook.set_classification("scientific");//设置minibook的分类为科学的//minibook.set_book_size(1);//std::cout << "minibook book_size:" << minibook.get_book_size() << std::endl;//minibook.self_introduction();//书的自我介绍继承于父类//堆创建(new来分配,delete来释放,我这里就没写释放)paper::Book* book = new paper::MiniBook();if (book){book->self_introduction();}book = new paper::BigBook();if (book){book->self_introduction();}book = new paper::Book();if (book){book->self_introduction();}
}

3.关于指针、内存、拷贝

/*内存和指针
(1)内存地址空间
0x00000000 (操作系统使用的内存空间) 0x80000000 (我们可以访问的空间) 0xFFFFFFFF
32=4*8  4个字节(2)指针/地址 例如:0x00000000 0x80000000 0xFFFFFFFF(3)堆空间与栈空间 代码->堆空间->函数参数(top)<-栈空间(本地变量,返回地址,函数参数)堆空间是由低地址到高地址 new来分配 delete/delete[]来释放
栈空间是由高地址到低地址(4)内存申请与释放
new来分配 delete/delete[]来释放(5)深拷贝与浅拷贝
浅拷贝:有一个变量中有指针,只拷贝变量内容,不拷贝变量指针所指内容
深拷贝:都拷贝,并且申请了一个新的指针浅拷贝a 0x1 2 ->0x80000012 123a 0x1 2 ->
深拷贝a 0x24-> 0x80000024 123
*/

带你学习c++系列(二)造了几本书相关推荐

  1. 焱老师带你学习MYSQL系列 第二篇 (MYSQL 数据结构)

    相关系列链接 焱老师带你学习MYSQL系列 第六篇 (MYSQL是如何实现锁的) 焱老师带你学习MYSQL系列 第五篇 (MYSQL事务隔离级别是如何实现的) 焱老师带你学习MYSQL系列 第四篇 ( ...

  2. 带你学习DSP系列一:走进TMS320F28377

    注意配图带水印,为本博作者头条号ID:种花家的启明星, DSP(Digital Signal Processing)即数字信号处理技术,所谓的DSP芯片即指能够实现数字信号处理技术的芯片.DSP芯片广 ...

  3. 从0开始学习GitHup系列 (二)

    加入 GitHub 看完上篇文章,估计不少人已经开始期待我继续更新了,这不赶紧马不停蹄,加班加点给你 们更新了第二篇.在更新本篇文章之前先回答昨天大家留言的两个问题: GitHub 需要翻墙么? 印象 ...

  4. C++学习笔记系列二

    一.第一部分 1.C++程序内存分配方式 栈区(stack):由编译器自动分配释放,堆区(heap):一般由程序员分配释放,不会随着函数栈的销毁而销毁,有程序员释放,或程序执行完成,有OS回收.全局/ ...

  5. UML/ROSE学习笔记系列二:UML的概念模型

    建模的3个主要要素:                          1.UML的基本构造块:                          2.支持这些构造块如何放在一起的规则:        ...

  6. 如何在Xshell5中访问jupyter notebook(妈妈再也不用担心我在家还不学习了系列二)

    目录 1.作者介绍 2.操作流程 1.作者介绍 陈锡伟,男,西安工程大学电子信息学院,2020级硕士研究生,张宏伟人工智能课题组. 研究方向:机器视觉与人工智能 电子邮件:1328729442@qq. ...

  7. 带你自学Python系列(二):Python列表总结-思维导图

    点击箭头处"蓝色字",关注我们哦!! 今天是小编持续更新关于Python的知识总结以及Python实践项目应用的第2天,带你利用零碎时间自学最受欢迎的编程语言之一Python语言. ...

  8. 通过自定义组件学习Vue系列(二)【时间轴】(附源码)

    需求: 用于升级日志的显示 效果图: 实现原理: 主要区域分为两块,时间区和内容区,时间区是画一个圆点和显示一个时间,内容区左边一个竖线和文字显示 然后做一下循环,将每个日期的数据显示出来 布局采用f ...

  9. BizTalk学习笔记系列之二:实例说明如何使用BizTalk

    BizTalk学习笔记系列之二:实例说明如何使用BizTalk --.BizTalk学习笔记系列之二<?XML:NAMESPACE PREFIX = O /> Aaron.Gao,2006 ...

最新文章

  1. RDKit | 化合物活性数据的不平衡学习
  2. HTTPS证书的申请过程
  3. jni c运行java字符串,通过JNI将C ++字符串发送到Java
  4. Android有道词典查询功能
  5. Windows server 2016简单部署DNS服务,正向查找和委派
  6. Linux文件的软链接和硬链接
  7. 微信小程序之 ----API接口
  8. python程序运行后没有反应_为什么我的电脑在运行这个python程序时速度变慢,没有反应?...
  9. 普中开发板白屏_普中开发板送的12864为什么程序写进去,屏幕不显示?
  10. 计算机网络发现已关闭啥意思,电脑显示网络发现已关闭,是什么意思?怎样解决问题?...
  11. NOI2016酱油记
  12. 电子商务网站测试经验总结
  13. 独家:沪上三大律师解读“三驾马车”下的数据合规与上海数商体系创新​
  14. 【软考】 5 计算机网络
  15. Apache Kafka Consumer 消费者集
  16. mysql在电脑怎么打开_电脑系统教程_电脑sql文件用什么打开
  17. SystemUI启动,及其SystemUIService启动
  18. 36.使用FCL中的委托声明
  19. 自制遥控小车,遥控距离可达2000米? (nrf24l01射频模块+Arduino nano+L297N)
  20. 捕食搜索算法(PS)-求解TSP问题

热门文章

  1. 视频格式转换器怎样使用?
  2. frp服务器,类似花生壳的内网映射软件
  3. 二叉树的DPS以及BPS
  4. LOCATOR.CONTROL 的变元无效:ORG_LOCATOR_CONTROL=‘‘
  5. 2021-02-01 PMP 群内练习题 - 光环
  6. 了解helmet的使用
  7. fvm操作多个flutter的安装和使用教程
  8. errbuf,retcode参数
  9. [题目解析]糖果归谁
  10. CloudKit快速入门之02 通过保存记录创建数据库架构 (SwiftUI iCloud CloudKit中文文档手册教程)...