2013-04-13 73 views
0

我想根据以下要求编写代码(面向对象的编程),但是我的bool保持返回true,而应该是false。希望你们可以告诉我我的代码出了什么问题。需要C++ bool编码帮助


要求

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(); 
} 
+1

什么是所有的东西你正在做的setPremium(),它甚至不看传递的参数?这个功能应该只是一个单线程! –

回答

2

您当地的bool premium被遮蔽的成员变量。要写入后者,您需要使用this->premium或重命名本地变量。除此之外,setPremium代码几乎没有任何意义 - 例如,您在布尔值上使用整数运算。

这是setPremium应该如何实现:

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

此外,您使用的是不确定的变量,如boolalpha。你的代码甚至不应该编译...

+0

另外,setPremium永远不会被调用。 – cgmb

+0

他根本不应该隐藏成员变量,如果他忘记了他这么做,希望启用的编译器警告应该告诉他这个问题... – DevSolar

+0

嗨,是的。我迷惑了自己。哈哈......它现在起作用了。谢谢你 – user2276948

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; 
}