【期末不挂科-C++考前速过系列P1】大二C++第1次过程考核(3道简述题&7道代码题)【解析,注释】

简介: 【期末不挂科-C++考前速过系列P1】大二C++第1次过程考核(3道简述题&7道代码题)【解析,注释】

前言

大家好吖,欢迎来到 YY 滴C++复习系列 ,热烈欢迎! 本章主要内容面向接触过C++的老铁

主要内容含:

一、简述题

1. 简述构造函数和析构函数分别有什么作用?

  • 构造函数用于在创建对象时初始化对象的数据成员,为对象分配内存空间,并执行其他必要的初始化操作。它通常用于初始化对象的状态,设置初始值,分配资源等。
  • 析构函数用于在对象被销毁时执行一些清理工作,比如释放对象占用的资源,关闭文件,断开连接等。它通常用于在对象生命周期结束时执行一些必要的清理操作,以确保对象的资源得到正确释放。

2. 公有成员和私有成员的区别是什么?

  • 公有成员和私有成员是面向对象编程中的两种访问控制权限。
  • 公有成员是指在类的外部和派生类中都可以被访问的成员。这意味着任何地方都可以访问和修改公有成员。公有成员通常用于提供接口和功能,以便外部代码可以与类进行交互。
  • 私有成员是指只能在类的内部访问的成员,外部代码无法直接访问或修改私有成员。私有成员通常用于隐藏类的实现细节,以防止外部代码直接访问和修改内部数据,从而提高类的封装性和安全性。
  • 总的来说,公有成员提供了对外部代码的接口,而私有成员隐藏了类的实现细节,使得类的内部状态和行为对外部代码不可见。

3. 什么是拷贝构造函数?它何时被调用?

  • 拷贝构造函数是一种特殊的构造函数,用于创建一个新对象并将其初始化为另一个同类对象的副本。它的函数签名通常是类名(const 类名
    &obj),其中参数是对同类对象的引用。

拷贝构造函数通常在以下情况下被调用:

  1. 当使用一个对象来初始化另一个对象时,会调用拷贝构造函数。
  2. 当把一个对象作为参数传递给函数,以值传递的方式传递对象时,也会调用拷贝构造函数。
  3. 当从函数返回一个对象时,也可能会调用拷贝构造函数。
  • 拷贝构造函数的作用是创建一个新的对象,并将其初始化为另一个对象的副本,以确保在这些情况下对象的数据成员得到正确复制,而不是简单地复制对象的地址。

二、代码题

例题1:

  • 声明一个名为Tree的类,它有数据成员age(树龄),有成员函数grow(int year),用于计算经过year这么多年的成长后树的最新年龄,以及GetAge(),用于提取树的年龄,并定义构造函数用于初始化tree对象的属性
class Tree {
private:
    int age;  // 树龄

public:
    // 构造函数,初始化树的年龄
    Tree(int initialAge) : age(initialAge) {}

    // 成长函数,计算经过year年后的树的最新年龄
    void grow(int years) {
        age += years;
    }

    // 获取树的年龄
    int getAge() {
        return age;
    }
};


例题2:

创建一个类,模仿基本数据类型的部分功能,将这个类命名为Integer(注意,这和表示整数类型的int大小写不同)。Integer类拥有整型数据成员value(数值),还有一些成员函数,比如显示一个Integer对象的值,以及将两个Integer对象相加。要求定义构造函数用于初始化Integer对象的值

#include <iostream>

class Integer {
private:
    int value;  // 整型数值

public:
    // 构造函数,用于初始化整数值
    Integer(int v) : value(v) {}

    // 显示Integer对象的值
    void displayValue() {
        std::cout << "The value is: " << value << std::endl;
    }

    // 将两个Integer对象相加
    Integer add(const Integer& other) {
        return Integer(value + other.value);
    }
};

例题3:

创建一个类,模仿基本数据类型的部分功能,将这个类命名为Integer(注意,这和表示整数类型的int大小写不同)。Integer类拥有整型数据成员value(数值),还有一些成员函数,比如显示一个Integer对象的值,以及将两个Integer对象相加。要求定义构造函数用于初始化Integer对象的值

#include <iostream>

class Integer {
private:
    int value;  // 整型数值

public:
    // 构造函数,用于初始化整数值
    Integer(int v) : value(v) {}

    // 显示Integer对象的值
    void displayValue() {
        std::cout << "The value is: " << value << std::endl;
    }

    // 将两个Integer对象相加
    Integer add(const Integer& other) {
        return Integer(value + other.value);
    }
};

例题4:

  • 考虑几何图形圆,它有属性:半径,行为:获取半径值,计算周长,计算面积,输出圆的相关信息。根据上述分析,请声明并实现一个Circle类
#include <iostream>

class Circle {
private:
    double radius;  // 半径

public:
    // 构造函数,用于初始化半径
    Circle(double r) : radius(r) {}

    // 获取半径值
    double getRadius() {
        return radius;
    }

    // 计算周长
    double calculatePerimeter() {
        return 2 * 3.14159 * radius;
    }

    // 计算面积
    double calculateArea() {
        return 3.14159 * radius * radius;
    }

    // 输出圆的相关信息
    void printInfo() {
        std::cout << "Circle Information:" << std::endl;
        std::cout << "Radius: " << radius << std::endl;
        std::cout << "Perimeter: " << calculatePerimeter() << std::endl;
        std::cout << "Area: " << calculateArea() << std::endl;
    }
};

例题5:

  • 编写一个程序,设计一个类Score用于统计一个班的学生成绩,其中定义一个静态数据成员totalScore存储总分,一个静态成员函数GetTotalScore( )实现对该静态数据成员的访问
#include <iostream>

class Score {
private:
    static int totalScore;  // 静态数据成员,存储总分

public:
    // 静态成员函数,实现对静态数据成员的访问
    static int GetTotalScore() {
        return totalScore;
    }
};

// 静态数据成员的定义和初始化
int Score::totalScore = 0;

int main() {
    // 假设有一些学生成绩需要统计
    int scores[] = {80, 90, 75, 85, 95};

    // 统计总分
    for (int i = 0; i < 5; i++) {
        Score::totalScore += scores[i];
    }

    // 输出总分
    std::cout << "Total score: " << Score::GetTotalScore() << std::endl;

    return 0;
}

例题6:

  • 创建一个名为Time的类,它包括分别表示小时、分钟和秒的int类型的数据成员以及两个构造函数,一个构造函数将这个数据初始化为0,另一个将它初始化为一个固定的值。另有一成员函数将时间以11:59:59的格式显示在屏幕上。
#include <iostream>

class Time {
private:
    int hours;
    int minutes;
    int seconds;

public:
    // 默认构造函数,将时间初始化为0
    Time() : hours(0), minutes(0), seconds(0) {}

    // 带参数的构造函数,将时间初始化为给定值
    Time(int h, int m, int s) : hours(h), minutes(m), seconds(s) {}

    // 显示时间在屏幕上
    void displayTime() {
        std::cout << "Time: " << hours << ":" << minutes << ":" << seconds << std::endl;
    }
};
  • 构造函数用缺省值的形式来写
#include <iostream>

class Time {
private:
    int hours;
    int minutes;
    int seconds;

public:
    // 默认构造函数,将时间初始化为0
    Time(int h = 0, int m = 0, int s = 0) : hours(h), minutes(m), seconds(s) {}

    // 显示时间在屏幕上
    void displayTime() {
        std::cout << "Time: " << hours << ":" << minutes << ":" << seconds << std::endl;
    }
};

例题7:

编写一个学生和教师数据输入和显示程序,学生数据有编号、姓名、班号和成绩,教师数据有编号、姓名、职称和部门。要求将编号、姓名输入和显示设计成一个类person,并作为学生数据操作类student和教师数据操作类teacher的父类。试编程实现,并将编写的代码贴到原代码处。

#include <iostream>
#include <string>

// 父类 Person
class Person {
protected:
    int id;
    std::string name;

public:
    void inputPersonData() {
        std::cout << "Enter ID: ";
        std::cin >> id;
        std::cout << "Enter Name: ";
        std::cin >> name;
    }

    void displayPersonData() {
        std::cout << "ID: " << id << std::endl;
        std::cout << "Name: " << name << std::endl;
    }
};

// 子类 Student
class Student : public Person {
private:
    int classNumber;
    int score;

public:
    void inputStudentData() {
        inputPersonData();
        std::cout << "Enter Class Number: ";
        std::cin >> classNumber;
        std::cout << "Enter Score: ";
        std::cin >> score;
    }

    void displayStudentData() {
        displayPersonData();
        std::cout << "Class Number: " << classNumber << std::endl;
        std::cout << "Score: " << score << std::endl;
    }
};

// 子类 Teacher
class Teacher : public Person {
private:
    std::string title;
    std::string department;

public:
    void inputTeacherData() {
        inputPersonData();
        std::cout << "Enter Title: ";
        std::cin >> title;
        std::cout << "Enter Department: ";
        std::cin >> department;
    }

    void displayTeacherData() {
        displayPersonData();
        std::cout << "Title: " << title << std::endl;
        std::cout << "Department: " << department << std::endl;
    }
};

int main() {
    Student student;
    Teacher teacher;

    std::cout << "Enter Student Data:" << std::endl;
    student.inputStudentData();
    std::cout << std::endl;

    std::cout << "Enter Teacher Data:" << std::endl;
    teacher.inputTeacherData();
    std::cout << std::endl;

    std::cout << "Student Data:" << std::endl;
    student.displayStudentData();
    std::cout << std::endl;

    std::cout << "Teacher Data:" << std::endl;
    teacher.displayTeacherData();

    return 0;
}


相关文章
|
12月前
|
算法 PyTorch 算法框架/工具
昇腾 msmodelslim w8a8量化代码解析
msmodelslim w8a8量化算法原理和代码解析
1015 5
|
6月前
|
C++ Windows
应用程序无法正常启动(0xc0000005)?C++报错0xC0000005如何解决?使命召唤17频频出现闪退,错误代码0xC0000005(0x0)
简介: 本文介绍了Windows应用程序出现错误代码0xc0000005的解决方法,该错误多由C++运行库配置不一致或内存访问越界引起。提供包括统一运行库配置、调试排查及安装Visual C++运行库等解决方案,并附有修复工具下载链接。
1811 1
|
存储 安全 C语言
C++ String揭秘:写高效代码的关键
在C++编程中,字符串操作是不可避免的一部分。从简单的字符串拼接到复杂的文本处理,C++的string类为开发者提供了一种更高效、灵活且安全的方式来管理和操作字符串。本文将从基础操作入手,逐步揭开C++ string类的奥秘,帮助你深入理解其内部机制,并学会如何在实际开发中充分发挥其性能和优势。
|
搜索推荐 UED Python
实现一个带有昼夜背景切换的动态时钟:从代码到功能解析
本文介绍了一个使用Python和Tkinter库实现的动态时钟程序,具有昼夜背景切换、指针颜色随机变化及整点和半点报时功能。通过设置不同的背景颜色和随机变换指针颜色,增强视觉吸引力;利用多线程技术确保音频播放不影响主程序运行。该程序结合了Tkinter、Pygame、Pytz等库,提供了一个美观且实用的时间显示工具。欢迎点赞、关注、转发、收藏!
549 94
|
8月前
|
API 数据安全/隐私保护 C++
永久修改机器码工具, exe一机一码破解工具,软件机器码一键修改工具【c++代码】
程序实现了完整的机器码修改功能,包含进程查找、内存扫描、模式匹配和修改操作。代码使用
|
9月前
|
C++
爱心代码 C++
这段C++代码使用EasyX图形库生成动态爱心图案。程序通过数学公式绘制爱心形状,并以帧动画形式呈现渐变效果。运行时需安装EasyX库,教程链接:http://【EasyX图形库的安装和使用】https://www.bilibili.com/video/BV1Xv4y1p7z1。代码中定义了屏幕尺寸、颜色数组等参数,利用随机数与数学函数生成动态点位,模拟爱心扩散与收缩动画,最终实现流畅的视觉效果。
1123 0
|
存储 Linux iOS开发
Python入门:2.注释与变量的全面解析
在学习Python编程的过程中,注释和变量是必须掌握的两个基础概念。注释帮助我们理解代码的意图,而变量则是用于存储和操作数据的核心工具。熟练掌握这两者,不仅能提高代码的可读性和维护性,还能为后续学习复杂编程概念打下坚实的基础。
Python入门:2.注释与变量的全面解析
|
传感器 监控 Java
Java代码结构解析:类、方法、主函数(1分钟解剖室)
### Java代码结构简介 掌握Java代码结构如同拥有程序世界的建筑蓝图,类、方法和主函数构成“黄金三角”。类是独立的容器,承载成员变量和方法;方法实现特定功能,参数控制输入环境;主函数是程序入口。常见错误包括类名与文件名不匹配、忘记static修饰符和花括号未闭合。通过实战案例学习电商系统、游戏角色控制和物联网设备监控,理解类的作用、方法类型和主函数任务,避免典型错误,逐步提升编程能力。 **脑图速记法**:类如太空站,方法即舱段;main是发射台,static不能换;文件名对仗,括号要成双;参数是坐标,void不返航。
491 5
|
自然语言处理 搜索推荐 数据安全/隐私保护
鸿蒙登录页面好看的样式设计-HarmonyOS应用开发实战与ArkTS代码解析【HarmonyOS 5.0(Next)】
鸿蒙登录页面设计展示了 HarmonyOS 5.0(Next)的未来美学理念,结合科技与艺术,为用户带来视觉盛宴。该页面使用 ArkTS 开发,支持个性化定制和无缝智能设备连接。代码解析涵盖了声明式 UI、状态管理、事件处理及路由导航等关键概念,帮助开发者快速上手 HarmonyOS 应用开发。通过这段代码,开发者可以了解如何构建交互式界面并实现跨设备协同工作,推动智能生态的发展。
827 10
鸿蒙登录页面好看的样式设计-HarmonyOS应用开发实战与ArkTS代码解析【HarmonyOS 5.0(Next)】
|
人工智能 文字识别 自然语言处理
保单AI识别技术及代码示例解析
车险保单包含基础信息、车辆信息、人员信息、保险条款及特别约定等关键内容。AI识别技术通过OCR、文档结构化解析和数据校验,实现对保单信息的精准提取。然而,版式多样性、信息复杂性、图像质量和法律术语解析是主要挑战。Python代码示例展示了如何使用PaddleOCR进行保单信息抽取,并提出了定制化训练、版式分析等优化方向。典型应用场景包括智能录入、快速核保、理赔自动化等。未来将向多模态融合、自适应学习和跨区域兼容性发展。
785 2

推荐镜像

更多
  • DNS