面向对象技术题型归类示例-2|Zam9036博客

本文介绍了C++中面向对象编程的多个实际问题,涉及多重继承派生类构造函数、包含子对象的派生类构造函数,以及运算符重载的应用,如+、-、*、/等,通过实例详细讲解了如何在类设计中实现这些功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编程语言

C++

继承与派生

11、多重继承派生类的构造函数
问题描述

声明一个教师(Teacher)类和一个学生(Student)类,用公有多重继承的方式声明一个在职研究生(Graduate)派生类,包含私有成员wages(津贴)。教师类中包含保护数据成员name(姓名)、age(年龄)、title(职称)。学生类中包含保护数据成员name1(姓名)、sex(性别)、score(成绩)。在定义派生类对象时给出初始化的数据,然后输出这些数据。

要求Teacher与Student类的数据成员都在自己的构造函数内初始化,新建Graduate对象时,Graduate应通过自身的构造函数去依次调用Teacher与Student的构造函数及其他。

部分代码已在下面给出,请在已有代码上补全,要求不能改动已有代码。

int main() {
    Graduate grad1("Johnson", 21, "male", "assistant", 90, 7800);
    grad1.show();
    return 0;
}

输出样例11

参考代码
#include <iostream>
#include <string>
using namespace std;
class Teacher
{
public:
    Teacher(string nam, int a, string tit) : name(nam), age(a), title(tit) {}

protected:
    string name;
    int age;
    string title;
};
class Student
{
public:
    Student(string nam, string s, int sco) : name1(nam), sex(s), score(sco) {}

protected:
    string name1;
    string sex;
    int score;
};
class Graduate : public Teacher, public Student
{
public:
    Graduate(string nam, int a, string s, string tit, int sco, int w) : Teacher(nam, a, tit), Student(nam, s, sco) { wages = w; }
    void show()
    {
        cout << "name:" << name << "age:" << age << "sex:" << sex << "score:" << score << "title:" << title << "wages:" << wages;
    }

private:
    int wages;
};
int main()
{
    Graduate grad1("Johnson", 21, "male", "assistant", 90, 7800);
    grad1.show();
    return 0;
}
12、包含子对象的派生类的构造函数
问题描述

现有一Student类,包含两个保护成员num与name,分别表示学号与姓名;另有一Student1类,公共继承自Student类,并且包含一个私有的Student类型的monitor与一个私有的age。

现要求构造一个Student1类型的stu对象,其中的monitor对象必须在Student1的构造函数中通过调用Student的构造函数的方式进行初始化。最后,通过stu对象调用show方法依次输出stu的学号与姓名以及年龄。

部分代码已在下面给出,请在已有代码上补全,要求不能改动已有代码。

int main(){
    Student1 stu(20120107, "Johnson", 20);
    stu.show();
    return 0;
}

输出样例12

参考代码
#include <iostream>
#include <string>
using namespace std;
class Student
{
public:
    Student(int n, string nam) : num(n), name(nam) {}

protected:
    int num;
    string name;
};
class Student1 : public Student
{
public:
    Student1(int n, string nam, int a) : Student(n, nam), monitor(n, nam) { age = a; }
    void show()
    {
        cout << num << " " << name << " " << age << endl;
    }

private:
    Student monitor;
    int age;
};
int main()
{
    Student1 stu(20120107, "Johnson", 20);
    stu.show();
    return 0;
}

运算符的重载

13、使用转换构造函数来实现两个对象之间的转换
问题描述

定义一个Teacher类,包含私有属性号码(num)、姓名(name)、性别(sex)、职称(title);

一个Student类,包含公有属性号码(num)、姓名(name)、性别(sex)、成绩(grade),

二者有一部分数据成员是相同的:号码(num)、姓名(name)、性别(sex)。

编写程序,使用转换构造函数,将一个Student对象转换为Teacher对象,并且只将Student对象的号码(num)、姓名(name)、性别(sex)移植给Teacher对象。

部分代码已在下面给出,请在已有代码上补全,要求不能改动已有代码。

int main()
{
       Student s(20160103, "Johnson", "male", 100);
       Teacher t = s;
       t.display();
       return 0;
}

输出样例13

参考代码
#include <iostream>
#include <string>
using namespace std;
class Student
{
public:
    Student(int a, string b, strin
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值