簡體   English   中英

C ++中的類構造函數

[英]Class Constructor in C++

我正在嘗試編寫一個構造函數,該構造函數采用學生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 

您必須使用名稱空間引用字符串類型,該名稱空間為stdstd::string fname

您的示例如下所示:

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


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

如果您想讓自己變得非常拘束,可以將類型稱為::std::string但是std::string通常就足夠了(除非您要構建通用庫)。

您需要先添加std:: 您可以using std::cout; 在頂部,然后像您一樣使用cout

最后,您需要研究重載運算符。

class Myclass {
    MyClass() { /*set defaults here*/ }
    MyClass(int id, std::string fname, std::string lname) { /* Set values here*/ }
};

使用std::string

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

using namespace std;

在主定義或類定義之前的全局范圍內

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

using namespace std;

class Student
{
 public:
   Student(int idnumber, string fname, string lname);
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的類成員。 是的,它們可以使用相同的名稱。 編譯器知道您的意思。

構造函數本身的主體為空,因為它沒有其他事情要做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM