-1

我正在尝试编写一个构造函数,该构造函数采用学生 ID 号以及学生的名字和姓氏的可选参数。如果未提供它们,则 ID 号默认为 0,名字和姓氏都默认为空字符串。我对构造函数完全陌生,所以我不知道我在做什么,但这就是我到目前为止所拥有的......

#include <iostream>
#include <cstdlib>
#include <string>


class Student
{
public:
    Student(int idnumber, string fname, string lname);

由于某种原因,它的说法字符串是未定义的?另外,如果未提供信息,我是否可以使用几个 if 语句将 ID 默认为 0 并将名称设置为空字符串?请尽可能为我简化一切,我对 C++ 非常陌生。谢谢你的时间。

这是我正在使用的数据......所有的名字和分数都是虚构的。

10601   ANDRES HYUN 88 91 94 94 89 84 94 84 89 87 89 91 
10611   THU ZECHER 83 79 89 87 88 88 86 81 84 80 89 81 
10622   BEVERLEE WAMPOLE 95 92 91 96 99 97 99 89 94 96 90 97 
10630   TRUMAN SOVIE 68 73 77 76 72 71 72 77 67 68 72 75 
4

4 回答 4

3

您必须使用其命名空间来引用字符串类型,即std: std::string fname

您的示例如下所示:

#include <iostream>
#include <cstdlib>
#include <string>


class Student
{
public:
    Student(int idnumber = 0, std::string fname = "", std::string lname = "");

如果您想非常挑剔,您可以将类型称为::std::stringstd::string通常就足够了(除非您正在构建通用库)。

于 2013-09-12T17:44:00.670 回答
0

您需要事先包括在内std::。你可以using std::cout;在顶部做一些事情,然后cout像你一样使用。

最后,您需要研究重载运算符。

class Myclass {
    MyClass() { /*set defaults here*/ }
    MyClass(int id, std::string fname, std::string lname) { /* Set values here*/ }
};
于 2013-09-12T17:47:50.697 回答
0

利用 std::string

或者如果您不想一次又一次地写它,只需写

using namespace std;

在主或类定义之前的全局范围内

#include <iostream>
#include <cstdlib>
#include <string>

using namespace std;

class Student
{
 public:
   Student(int idnumber, string fname, string lname);
于 2013-09-12T17:59:15.653 回答
0
class Student {
public:
    Student(int idnumber=0, std::string fname="", std::string lname="")
        : idnumber(idnumber), fname(fname), lname(lname) {}

private:
    int idnumber;
    std::string fname;
    std::string lname;
};

这使用参数默认值来指定您未显式传入的参数的默认值。然后您可以通过Student以下四种方式之一构造对象:

Student s1;                      // idnumber=0, fname="", lname""
Student s2(1);                   // idnumber=1, fname="", lname=""
Student s3(1, "John");           // idnumber=1, fname="John", lname=""
Student S4(1, "John", "Smith");  // idnumber=1, fname="John", lname="Smith"

然后它使用初始化语法来相应地设置字段。

: idnumber(idnumber)

指定命名的类成员idnumber应该使用参数的值进行初始化idnumber。是的,它们可以具有相同的名称。编译器知道你的意思。

构造函数的主体本身是空的,因为它没有其他事情可做。

于 2013-09-12T18:02:01.397 回答