【问题标题】:Modularization in C++C++ 中的模块化
【发布时间】:2020-12-17 20:42:46
【问题描述】:

我目前正在开发一个(非常非常基本的)程序,它是一个编程教程(我知道,鉴于我的知识具有讽刺意味)。我被指示将我的代码模块化,以便每个单元都在自己的模块中。我猜这意味着添加标题?我正在使用 Visual Studios,如果这有帮助的话。我在下面包含了我的代码,以帮助我的错误解释变得有意义。感谢您提供的任何帮助!

#include <iostream>
#include <iomanip>
#include <string>
using namespace std;

int Total;
int ans;

class Question
{
private:
    string Question_Text;
    string Answer_one;
    string Answer_two;
    string Answer_three;

    int Correct_Answer;
    int Question_Score;

public:
    void setValues(string, string, string, string, int, int);
    void askQuestion();
};

int main()
{
    string username = "";
    char choice=' ';
    char c;
    int x = 4;
    int y = 5;
    int z = x + y;


    //welcome message
    cout << "Hello user, please enter your name:";
    cin >> username;
    cout << "Welcome to the programming tutorial " << username << "." << endl;

    //menu selection
    while(choice != '5')
    {
        cout << "What would you like to do? (Unit 1 - Declaring Variables (1), Unit 2 - Input/ Output (2), Unit 3 - Conditionals (3), Quizzes (4) or Exit (5))";
        cin >> choice;
        if (choice == '1')
        {
            cout << "We will begin with defining variables. The first step to doing this is choosing which datatype your variable is.\n";
            cout << "The following are a few of the common datatypes used in programming.\n";
            cout << "Character ==> char\n";
            cout << "Integer ==> int, long, double\n";
            cout << "Boolean ==> bool\n";
            cout << endl;
            cout << "When declaring a variable, you must put its datatype before the variable name.\n";
            cout << "An example of this would be if we wanted to declare the value of x as 4.\n";
            cout << "We would write this as: \n";
            cout << "int x = 4\n";
            cout << "The program will now use the value 4 for the variable name 'x'\n";
            cout << endl;
            cout << "Now let's assume we assigned the value of 5 to the variable 'y'\n";
            cout << "If we wanted to add x and y and assign the sum to the variable 'z', we would write:\n";
            cout << "int z = x + y\n";
            cout << "Now when we use the variable 'z' in our program, it will perform the calculation given x=4 and y=5 and declare 9 as the value of the variable 'z'.\n";
            cout << "To test our code, we would write: " << endl;
            cout << "cout<<'x + y'<< z << endl; \n";
            cout << "If written correctly, it will display as: \n";
            cout << "x + y = " << z << "." << endl;

        }
        if (choice == '2')
        {
            cout << "Now that we understand the basics of declaring variables, let's discuss displaying, or output of, information to a user.\n";
            cout << "If you wanted to display a welcome message, for example, you would type:\n";
            cout << "cout << 'Welcome';\n";
            cout << "The line of code would start with 'cout' followed by two less than signs and then the message you wish to display in quotes.\n";
            cout << "Using this, you can ask the user for input.\n";
            cout << "Enter c to continue...";
            cin >> c;
            cout << "Let's say we have a program that flips a coin. You may want to ask the user how many times to flip the coin.\n";
            cout << "Assuming we previously declared this amount variable as 'int timesFlipped', we would 'cout' our question and the next line would read:\n";
            cout << "cin>> timesFlipped; \n";
            cout << "This will store the users input for the variable 'timesFlipped'\n";
            cout << "You almost always end a line of code with a semi colon." << endl;
        }
        if (choice == '3')
        {
            cout << "This unit will cover conditional expressions." << endl;
        }
        if (choice == '4')
        {
            string Question_Text;
            string Answer_one;
            string Answer_two;
            string Answer_three;

            int Correct_Answer;
            int Question_Score;
            Question q1;
            Question q2;
            Question q3;


            cout << username << ", you have chosen to take a quiz." << endl << endl;
            int ans, score = 0;
            cout << "Unit One Quiz - Variables " << endl << endl;

            q1.setValues("How would you declare the value of 'x' as 12? ",
                "x=12()",
                "x==12()",
                "x=12;()",
                3,
                1);
            q2.setValues("What do you need to put before a variable when declaring it?",
                "a name()",
                "a value()",
                "a datatype()",
                3,
                1);
            q3.setValues("Which data type would you use for a number that includes a decimal value?",
                "int()",
                "double()",
                "float()",
                2,
                1);

            q1.askQuestion();
            q2.askQuestion();
            q3.askQuestion();

            cout << "Your score out of a possible 3 is " << Total << endl;

        }
        if (choice == 'E')
        {
            cout << "Have a good day!";
            break;
        }
    }


    system("pause");
}

void Question::setValues(string q, string a1, string a2, string a3, int ca, int pa)
{

    Question_Text = q;
    Answer_one = a1;
    Answer_two = a2;
    Answer_three = a3;
    Correct_Answer = ca;
    Question_Score = pa;
}

void Question::askQuestion()
{

    cout << endl;
    cout << Question_Text << endl;
    cout << "1. " << Answer_one << endl;
    cout << "2. " << Answer_two << endl;
    cout << "3. " << Answer_three << endl << endl;
    cout << "Please enter your answer: " << endl;
    cin >> ans;

    if (ans == Correct_Answer)
    {
        cout << "That is correct!" << endl;
        Total = Total + Question_Score;
    }
    else
    {
        cout << "Sorry, that is incorrect" << endl;
        cout << "The correct answer was " << Correct_Answer << endl;
    }
}

【问题讨论】:

  • 在选择 == '4' 中你声明了变量:string Question_Text; string Answer_one; string Answer_two; string Answer_three; 我不认为它们被使用了。
  • 做你需要做的事情来让老师开心并取得好成绩,但如果有余地,就错在好的、可读的代码方面。您会发现它通常比闪电般快速的代码更重要。
  • 作为一个几乎普遍的规则,任何教授 C++ 的教授对他们在做什么几乎零了解,所以对他们所说的一切都持怀疑态度,并对他们给出的任何建议持极其怀疑的态度。这条规则也有例外,但遗憾的是它们非常罕见。尽你所能取得好成绩,但不要让他们的建议严重损害你对 C++ 的理解。
  • @tadman 我正在努力!更糟糕的是,他们让我们用 Python 开始了一个学期,然后去 C++ 哈哈
  • 彼得观点的例子:if (choice == '1') { huge block of code } 可能是if (choice == '1') { do_choice_1(); },而do_choice_1() 函数包含大量代码。这将有助于将main 函数保持在一个合理的大小,以便人类有机会适应他们的大脑和理解。我听过并读过很多关于函数应该有多大的指标,但总的要点是“做一件事,把它做好”。

标签: c++ modularization


【解决方案1】:

我猜这意味着添加标题?

差不多就是这个意思。

在您的情况下,您可能希望:

  • 创建一个标头名称Question.h,其中包含Question 类的声明。
  • 创建一个源文件名Question.cpp并将类定义移到那里,即所有函数,如void Question::askQuestion()等。
  • 创建一个测试文件名test.cpp 来放置你的main 函数,并记得包含Question.h

当您使用 Visual Studio 时,您可以提前创建一个项目,然后在编译/构建之前添加所有这些文件。

【讨论】:

  • 你怎么确定这个教程不是关于 C++20 模块的?
  • 我不太“确定”。无论如何,这是一个建议。
  • 非常感谢,这非常有帮助!无论出于何种原因,@einpoklum 似乎一直在讨论我的问题,因为我对此并不陌生,显然他们需要做出明智的评论才能感觉有效。
  • 不客气。人们有不同的意见,别着急。
  • @artm 如果这是他发表的第一条评论,我会同意。
猜你喜欢
  • 2010-12-27
  • 2014-01-26
  • 2011-01-18
  • 1970-01-01
  • 1970-01-01
  • 2021-04-15
  • 1970-01-01
  • 2018-08-29
  • 1970-01-01
相关资源
最近更新 更多