【C++】——继承和派生

简介: 【C++】——继承和派生

🎯第一题:

编写一个学生类,学生数据有编号、姓名、年龄、专业和成绩,要求将编号、姓名、年龄数据设计成一个人类Person,并作为学生类Student的基类。创建Student类对象,并使用显示show()函数对数据进行输出。

5be2794aa1f4a562462ef704a775b122_4f2916ca63528cf4c7546ca9ca2cd9d2.png

🎯 第二题:

设计职员类employee,它继承Person类并包含子对象Date类对象。要求将编号、姓名、性别设计成类Person,Date类包含年、月、日;职员类另有部门及职务成员数据。主程序创建职员类对象并输出信息。

bb1a206d8fadd5dd1bb2fcc8d362ca0b_46e412fa4b4112de83cab90f81ee4d0d.png

🎯 第三题:

已有类Time和Date,要求设计一个派生类Birth,它继承类Time和类Date,并且增加一个数据成员childname用于表示小孩的名字,设计show函数显示信息;主程序创建Birth类对象并调用show()函数显示信息。

b252d8a6d8dde2adf0e56858fb8cc0f3_897c458207b9271cca0ca6acff8fd8b0.png

💻第一题:

#include <iostream>
 
using namespace std;
 
class Person {
 
private:
 
string _id;
 
string _name;
 
int _age;
 
public:
 
Person(string id,string name,int age);
 
void show();
 
};
 
Person::Person(string id,string name,int age) {
 
_id=id;
 
_name=name;
 
_age=age;
 
}
 
void Person::show() {
 
cout<<"编号:"<<_id<<endl;
 
cout<<"姓名:"<<_name<<endl;
 
cout<<"年龄:"<<_age<<endl;
 
}
 
//派生类
 
class Student:public Person {
 
private:
 
string _major;
 
int _score;
 
public:
 
Student(string id,string name,int age,string major,int score);
 
void show();
 
};
 
Student::Student(string id,string name,int age,string major,int score)
 
:Person(id,name,age) {
 
_major=major;
 
_score=score;
 
}
 
void Student::show() {
 
Person::show();
 
cout<<"专业:"<<_major<<endl;
 
cout<<"成绩:"<<_score<<endl;
 
}
 
int main() {
 
Student stu1("s10001","zhangsan",20,"软件工程",95);
 
stu1.show();
 
return 0;
 
}
 
 
 

💻第二题:

#include <iostream>
 
using namespace std;
 
class Person {
 
private:
 
string _id;
 
string _name;
 
string _sex;
 
public:
 
Person(string id,string name,string sex);
 
void show();
 
};
 
Person::Person(string id,string name,string sex) {
 
_id=id;
 
_name=name;
 
_sex=sex;
 
}
 
void Person::show() {
 
cout<<"编号:"<<_id<<endl;
 
cout<<"姓名:"<<_name<<endl;
 
cout<<"性别:"<<_sex<<endl;
 
}
 
class Date {
 
public:
 
Date(int y,int m,int d) {
 
_year=y;
 
_month=m;
 
_day=d;
 
}
 
void display() {
 
cout<<"出生日期:"<<_year<<"."<<_month<<"."<<_day<<endl;
 
}
 
protected:
 
int _month,_day,_year;
 
};
 
class Employee:public Person {
 
public:
 
Employee(string id,string name,string sex,int y,int m,int d,string dept,string duty);
 
void show();
 
private:
 
Date date;
 
string _dept;
 
string _duty;
 
};
 
/*************************************************************/
 
Employee::Employee(string id,string name,string sex,int y,int m,int d,string dept,string duty)
 
      :date(y,m,d),Person(id,name,sex) {
 
_dept=dept;
 
_duty=duty;
 
}
 
void Employee::show() {
 
Person::show();
 
date.display();
 
cout<<"部门:"<<_dept<<endl;
 
cout<<"职务:"<<_duty<<endl;
 
}
 
/*************************************************************/
 
int main() {
 
Employee employee("10001","杨萍","女",1990,9,29,"团委","团委书记");
 
employee.show();
 
return 0;
 
}
 
 
 

💻第三题:

#include <iostream>
 
using namespace std;
 
class Time {
 
public:
 
Time(int h,int min,int s) {
 
hours=h;
 
minutes=min;
 
seconds=s;
 
}
 
void display() {
 
cout<<"出生时间:"<<hours<<"时"<<minutes<<"分"<<seconds<<"秒"<<endl;
 
}
 
protected:
 
int hours,minutes,seconds;
 
};
 
class Date {
 
public:
 
Date(int y,int mon,int d) {
 
year=y;
 
month=mon;
 
day=d;
 
}
 
void display() {
 
cout<<"出生日期:"<<year<<"年"<<month<<"月"<<day<<"日"<<endl;
 
}
 
protected:
 
int year,month,day;
 
};
 
class Birth:public Date,public Time{
 
public:
 
Birth(string name,int y,int mon,int d,int h,int min,int s);
 
void show();
 
private:
 
string childname;
 
};
 
/********************************************************************/
 
Birth::Birth(string name,int y,int mon,int d,int h,int min,int s):Date(y,mon,d),Time(h,min,s){
 
childname=name;
 
}
 
void Birth::show(){
 
cout<<"姓名:"<<childname<<endl;
 
Date::display();
 
Time::display();
 
}
 
/********************************************************************/
 
int main() {
 
    Birth birth("李雷",2003,7,1,13,10,10);
 
    birth.show();
 
return 0;
 
}
 
 
 
相关文章
|
8天前
|
C++ 开发者
C++学习之继承
通过继承,C++可以实现代码重用、扩展类的功能并支持多态性。理解继承的类型、重写与重载、多重继承及其相关问题,对于掌握C++面向对象编程至关重要。希望本文能为您的C++学习和开发提供实用的指导。
38 16
|
4天前
|
编译器 数据安全/隐私保护 C++
【C++面向对象——继承与派生】派生类的应用(头歌实践教学平台习题)【合集】
本实验旨在学习类的继承关系、不同继承方式下的访问控制及利用虚基类解决二义性问题。主要内容包括: 1. **类的继承关系基础概念**:介绍继承的定义及声明派生类的语法。 2. **不同继承方式下对基类成员的访问控制**:详细说明`public`、`private`和`protected`继承方式对基类成员的访问权限影响。 3. **利用虚基类解决二义性问题**:解释多继承中可能出现的二义性及其解决方案——虚基类。 实验任务要求从`people`类派生出`student`、`teacher`、`graduate`和`TA`类,添加特定属性并测试这些类的功能。最终通过创建教师和助教实例,验证代码
21 5
|
2月前
|
编译器 C++ 开发者
【C++】继承
C++中的继承是面向对象编程的核心特性之一,允许派生类继承基类的属性和方法,实现代码复用和类的层次结构。继承有三种类型:公有、私有和受保护继承,每种类型决定了派生类如何访问基类成员。此外,继承还涉及构造函数、析构函数、拷贝构造函数和赋值运算符的调用规则,以及解决多继承带来的二义性和数据冗余问题的虚拟继承。在设计类时,应谨慎选择继承和组合,以降低耦合度并提高代码的可维护性。
39 1
【C++】继承
|
3月前
|
安全 程序员 编译器
【C++篇】继承之韵:解构编程奥义,领略面向对象的至高法则
【C++篇】继承之韵:解构编程奥义,领略面向对象的至高法则
99 11
|
3月前
|
C++
C++番外篇——对于继承中子类与父类对象同时定义其析构顺序的探究
C++番外篇——对于继承中子类与父类对象同时定义其析构顺序的探究
69 1
|
3月前
|
C++
C++番外篇——虚拟继承解决数据冗余和二义性的原理
C++番外篇——虚拟继承解决数据冗余和二义性的原理
53 1
|
3月前
|
安全 编译器 程序员
C++的忠实粉丝-继承的热情(1)
C++的忠实粉丝-继承的热情(1)
25 0
|
3月前
|
编译器 C++
C++入门11——详解C++继承(菱形继承与虚拟继承)-2
C++入门11——详解C++继承(菱形继承与虚拟继承)-2
46 0
|
3月前
|
程序员 C++
C++入门11——详解C++继承(菱形继承与虚拟继承)-1
C++入门11——详解C++继承(菱形继承与虚拟继承)-1
52 0
|
4月前
|
C++
c++继承层次结构实践
这篇文章通过多个示例代码,讲解了C++中继承层次结构的实践应用,包括多态、抽象类引用、基类调用派生类函数,以及基类指针引用派生类对象的情况,并提供了相关的参考链接。