C++:使用单个 get 函数返回与对象相关的变量

C++: Using a single get function to return the variables related to an object

本文关键字:对象 变量 返回 函数 单个 get C++      更新时间:2023-10-16

我是一名新手程序员,为学校做一个编码项目。

问题域如下:

编写与时钟相关的C++程序

  • 定义一个名为 时钟 的类,保存在单独的文件中,其中包括以下成员:
    • 与小时、分钟和秒相关的三个成员变量
    • 一个返回三个变量值的访问器函数(提示:使用指针)
    • 一个修改所有变量的突变器函数(提示:使用三个参数)
    • 用 1 递增每个变量的函数(提示:三个函数)
    • 重载函数以使用用户输入的值递增变量(提示:该值是函数的参数)
    • 一个将时钟设置为 0 小时、0 分钟和 0 秒的默认构造函数
    • 将时钟设置为给定时间(小时、分钟、秒)的重载构造函数
  • 定义保存在单独文件中的第二个类,其中包括
    • 静态成员变量
    • 静态成员函数
  • 在先前定义的文件中包括C++代码,以确保类不会在主程序中加载两次
  • 定义一个主程序,保存在一个单独的文件中,
    • 实例化三个对象,一个使用 Clock 的默认构造函数,一个使用 Clock 的重载构造函数,一个基于第二个类
    • 使用这些对象调用两个类中定义的所有函数:
    • 使用多个"CIN"语句从用户读取所需时间,并将这些值用作所需相应函数的参数
    • 每个函数仅调用一次,使用定义的对象之一
    • 使用访问器函数打印修改 Clock 类变量的每个函数调用后的时间
    • 包括使用第二个类的静态成员的代码

我们在课堂上做了很多例子,我们能够使用单独的get\set函数,但这是我们第一次尝试使用单个get函数和指针来做到这一点。坦率地说,我迷路了

这是我的头文件的内容:

// default class definition
#ifndef CLOCK1_H
#define CLOCK1_H
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
class Clock
{
private:
    int hours;
    int minutes;
    int seconds;
public:
    int Clock::getInitialTime();
    int Clock::setClockTime();
    Clock::Clock();             // default constructor
    Clock::~Clock();                // default destructor
};
#endif

这是我的源代码文件的内容:

// function declarations  main program
//
#include "stdafx.h"
#include "Clock1.h"
#include <iostream>
#include <conio.h>
using namespace std;
int Clock::getInitialTime()
{
    return hours, minutes, seconds;
}
//void Clock::setClockTime(int hr,min,sec)
//{
//  hours=hr;
//  minutes=min;
//  seconds=sec;
//}

// default constructor
Clock::Clock()
{
    hours=0;
    minutes=0;
    seconds=0;
}
// default destructor
Clock::~Clock()
{
    cin.get();
    cin.get();
}
int main()
{
    Clock defaultObj;
    defaultObj.getInitialTime();
    cout << "The initial time is " << defaultObj.getInitialTime() << endl;
    return 0;
}

我正在尝试以小步骤进行此操作,第一个目标是能够输出小时,分钟,秒的初始值。 完成此操作后,我可以添加带有其他参数的其他构造函数。

我的第一个猜测是我需要添加以下内容:

构造 函数:将适当的参数添加到默认构造函数

Clock::Clock(int *hourPrt, int *minutePtr, int *secondPrt)

创建指针

Clock *hourPtr;
Clock *minutePtr;
Clock *secondPtr;

将它们与对象的属性相关联

hourPrt=defaultObj.hours
minutePtr=defaultObj.minutes
secondPrt=defaultObj.seconds

getInitialTime 函数如何修改它

主函数调用如何修改它

谁能帮我解决这个问题?

谢谢

构造函数不是您需要更改的函数之一。 从写void Clock::setClockTime(int hours, int minutes, int seconds)开始,这是最简单的。


另请注意,在类内部时,不要在成员函数前面加上类名。

class Clock
{
public:
    Clock::Clock();             // WRONG
    Clock(); // RIGHT way to declare constructor
};

你可以创建一个包含三个值的结构并返回它,或者你可以返回一个指向 3 int s 数组的指针——使元素[0]小时、[1]分钟等。 请注意,如果要在实际C++代码中这样做,则需要使用类似vector的东西,以便客户端不必在返回的数组上调用delete []后。:)

要"返回"多个参数,您必须使用指针:

void get_values(int *hours, int *minutes, int *seconds) {
  *hours = this->hours;
  *minutes = this->minutes;
  *seconds = this->seconds;
}

用法:

int hours, minutes, seconds;
clock.get_values(&hours, &minutes, &seconds);

第一步,我将进行以下更改:

  • 更改getInitialTime()以返回Clock类型
  • 添加一个方法以显示Clock对象的值。(这最终可以更改为ostream输出运算符)。

    void Display(const Clock& clock)
    {
        cout << clock.Hour << ":" << clock.Minutes << ":" clock.Seconds << endl;
    }