0

以下の要件に基づいてコード (オブジェクト指向プログラミング) を作成しようとしていますが、boolfalse である必要があるのに true を返し続けました。私のコードで何がうまくいかなかったのか教えていただければ幸いです。


要件

Member(string = "xxx", bool = false, string = "addr")
Constructor with default values

setMember(string, bool, string): void
Set the values of data members to the respective pass-in values

setPremium(bool): void
Set the value of data member, premium to the pass-in value

getPremium():bool
Returns the value of data member, premium

setMember(string, bool, string): void
Set the values of data members to the respective pass-in values

displayMember():void
Uses cout to display the data members

マイコード

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

class Member
{
private:
    string name;
    bool premium;
    string address;
public:
    Member(string = "xxx", bool = false, string = "addr");

    void setMember(string, bool, string);
    void setPremium(bool);
    bool getPremium();
    int index;

    void DisplayMember();
};

Member::Member(string name, bool premium, string address)
{
    this-> name = name;
    this-> premium = premium;
    this-> address = address;
}

void Member::setMember(string name, bool premium, string address)
{
    this-> name = name;
    this-> premium = premium;
    this-> address = address;
}

void Member::setPremium(bool)
{
    int i;
    bool premium;
    i = 0;

while (i != 4)
{
    i = i + 1;
}
    if (premium >= 4) 
    {

    index = i;
        premium = true;
    }
    else 
        premium = false;
}

bool Member::getPremium()
{
    return premium;
}

void Member::DisplayMember()
{
    cout<<"Name : "<<name<<endl;
    cout<<"Premium : "<<boolalpha<<premium<<endl;
    cout<<"Address : "<<address<<endl;
}

int main()
{
    Member detail1("Martin ", "2 Tampines Avenue");
    detail1.DisplayMember();

    cin.ignore();
    cin.ignore();
}
4

2 に答える 2

2

あなたのローカルbool premiumはメンバー変数を隠しています。後者に書き込むにはthis->premium、ローカル変数を使用するか名前を変更する必要があります。それに加えて、setPremiumコードはほとんど意味がありません-たとえば、ブール値で整数演算を使用しています。

setPremium実装方法は次のとおりです。

void Member::setPremium(bool premium)
{
    this->premium = premium;
}

さらに、 などの未定義の変数を使用していますboolalpha。あなたのコードはコンパイルさえすべきではありません...

于 2013-04-13T08:18:37.647 に答える
0

問題を解決するには、コンストラクターの引数の順序を変更するだけです。

public:
    Member(string = "xxx", string = "addr", bool = false);

と:

Member::Member(string name, string address, bool premium)
{
    this-> name = name;
    this-> premium = premium;
    this-> address = address;
}
于 2013-04-13T08:23:29.777 に答える