IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 计算机程序设计c++ 11-1:派生类 -> 正文阅读

[C++知识库]计算机程序设计c++ 11-1:派生类

问题

假设两个类,中间有些特征或者功能是有交叉的地方。现在想要合并两个类为一个新的类。简单的合并会面临的问题:代码大量重复!
因此需要通过采用继承式的抽象方法描述万物,不用重复的造轮子,减少代码重复

继承的概念

  • 从一个或多个以前定义的类(基类)产生新类的过程称为派生
  • 新产生的类又称为派生类
  • 类的继承(inheritance)是指新类从基类那里得到基类的特征,也就是继承基类的数据和函数
  • 派生的新类同时也可以增加或重新定义数据和函数

继承的好处

  • 软件复用是软件设计中常用的手段
  • 在程序设计中反复使用高质量的软件来缩短开发时间,提高效率(数量和质量)
  • 客观世界中许多实体之间是有继承特性的
    • 点→圆→圆柱体
    • 人→学生→大学生
    • 水果→桃→水蜜桃→陕西水蜜桃

派生类的定义

class 派生类名: 继承方式 基类名1, 继承方式 基类名2,, 继承方式 基类名n
{
	派生类增加的成员声明;
};
class sing_star:public person
{
	float salary; //薪水
	public:
		sing_star(); //无参构造函数
		sing_star(char *n,char s,char *p,int w,int h,float s1); //有参构造函数
		void change_data(char *n,char s,char *p,int w,int h,float s1);//修改数据
		void playing(char *ps); //演唱歌曲
		void print(); //输出歌星属性值
};

例子:人类中定义增加有关日期时间的属性
一个人一生中有许多重要日期和时刻

  • 上大学日期、结婚日期
  • 出生时间
class Date
{
	protected:
		int year
		int month;
		int day;
	public:
		Date() { year = 1900; month = day = 1; }
		Date(int yy,int mm,int dd){ init(yy, mm, dd); };
		void init(int,int,int );
		void print_ymd();
		void print_mdy();
};

基类:时间类的定义

class Time
{
	protected:
		int hour;
		int miniter;
		int second;
	public:
		Time() { hour = miniter = second = 0; }
		Time(int h,int m,int s){init(h,m,s);};
		void init(int,int,int );
		void print_time();
};

派生类:人类的定义

class person:public Date, public Time
{ 
	//注意包含了基类person的出身日期和出身时间
	char name[20];
	char sex;
	char pid[19];
	int weight;
	int high;

	public:
		person();
		person(char *n,char s,char *p,int w,int h,int hr,int mr,int sd);
		void change_data(char *n,char s,char *p,int w,int h,int hr,int mr,int sd);
		void walking(int k);
		void hearing(char *sentence);
		void speek();
		void writing();
		void ShowMe();
};

派生类:人类的构造函数定义

person::person()
{
	name = new char[strlen("XXXXXX")+1];
	strcpy(name,"XXXXXX");
	strcpy(pid,"XXXXXXXXXXXXXXXXXX");
	sex='X';
	weight=0;
	high=0;
	year=1900;
	month=day=1;
	hour=miniter=second=0;
}


person::person(char *n, char s, char *p, int w, int hh, int hr, int mr, int sd)
{
	change_data(n, s, p, w, hh, hr, mr, sd);
}

修改数据函数定义

void person::change_data(char *n, char s, char *p, int w, int hh, int hr, int mr, int sd)
{ 
	name = new char[strlen(n)];
	strcpy(name,n);
	strcpy(pid,p);
	sex = s;
	weight = w;
	high = hh;
	char temp[5]; //通过身份证号码产生出身日期
	strncpy(temp,p+6,4);
	year = atoi(temp);
	strncpy(temp,p+10,2);
	temp[2] = '\0';
	month = atoi(temp);
	strncpy(temp, p+12, 2);
	temp[2] = '\0';
	day = atoi(temp);
	hour = hr;
	miniter = mr;
	second = sd;
}

人类的测试主函数

int main()
{
	//创建对象
	person Jack("James Chen",'M',"610103198901062493",160,180,23,34,35);
	Jack.print(); //输出人的属性值
	system("pause");
	Jack.walking(10,4); //行走10步,1/4秒走一步
	Jack.hearing("You are simple"); //听英文句子
	Jack.speek(1006); //说出整数num的英文句子
	cout<<endl;
	Jack.writing(); //书写汉字“曲”
	return 0;
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-09 11:28:26  更:2021-12-09 11:29:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:50:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码