【问题标题】:Several questions regarding separating Interface from implementation关于接口与实现分离的几个问题
【发布时间】:2016-06-28 15:02:32
【问题描述】:

好的,我有这个标题

using namespace std;

class students
{
private:
struct record {
    int RUID;
    string first_name;
    string last_name;
    vector<double>quiz_grades;
    array<double, 3>exam_grades;
};

vector<record>student_records;

public:

friend void change_name();
void setRUID (int idnt);
void setFirstName (string first);
void setLastName (string last);
void setQuiz (vector<double> quiz);
void setExam (array<double, 3> exam);

};

我必须将类的所有函数写在一个单独的cpp文件中。

我尝试了以下方法:

#include <iostream>
#include "students.h"
using namespace std;

void students::setRUID (int idnt)
{
      RUID = idnt;
}

但是我如何访问班级学生内部的结构?

如果我尝试这个void students::record::setRUID (int idnt) 它不起作用,因为记录中没有 setRUID 声明。

问题 2。 我必须为每个学生的测验和考试设置 3 个随机分数。我知道该怎么做,但我声明的功能正确吗?

问题 3。 我在哪里声明向量的大小? 虽然这里有一些错误,但这会起作用吗?

void students::setQuiz(vector<double> quiz)
{
  int size = 3;
  quiz_grades.resize(size);
  quiz.resize(size);
  srand(0);
  for ( int i = 0; i < size; i++ )
  {
    quiz[i] = rand()%100 + 0;
  }

  for ( int i = 0; i < size; i++ )
  {
    quiz_grades[i] = quiz[i];
  }
}

或者我是否使用 main 为每个学生插入随机成绩?

基本上这是要求

"为类的定义写一个头文件,为类的功能写一个cpp文件,还有一个main.cpp文件。"

我是这个主题的新手,任何帮助将不胜感激。谢谢

【问题讨论】:

  • 如果你的班级被称为“学生”并且它管理着大量的学生,谁会被setFirstName变异?也许你想从一个让一个学生重新认识的班级开始。我建议你称它为“学生”。当你确定它的界面时,而不是更早,开始做一些东西,把许多学生的信息放在一起(如果你仍然需要的话)。

标签: c++ class interface implementation


【解决方案1】:

我正在回答第一个问题。 结构就像类,它们只是模板。首先,它们需要被实例化。您在类中的结构将如下所示。

class student {
    struct record {
        int RUID;
    };
// instantiate structure
    record recordInstance;
public:
    void setRUID();
    };

现在RUID 可以通过类和结构实例访问。


下一步,只是将setRUID()函数修改为:

void students::setRUID (int idnt) {
      recordInstance.RUID = idnt;
}

类似的问题: struct in class

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-03
    • 1970-01-01
    • 2010-12-10
    • 1970-01-01
    • 2016-08-24
    • 1970-01-01
    • 2011-02-06
    相关资源
    最近更新 更多