2017-12-08 3 views
0

구조체와 관련하여 주제를 약간 만들었습니다. 그리고 클래스에는 구조체와 같은 개념이 있다는 것을 알고 있습니다. 문자열을 클래스에 저장하는 방법은 무엇입니까?C++ 클래스에 문자열 저장

int main() { 

    studentType object, number; 

    cout << "enter name and code of item1: "; 
    cin >> object.setData() >> object.setData(); 
    cout << "enter name and code for item2: "; 
    cin >> number.setData() >> number.setData(); 

    system("pause"); 
    return 0; 
} 

가 어떻게이 CIN 문제를 해결하는 것입니다 :

class studentType 
{ 
public: 
    void setData(string, int); 
    string getName() const; 
    int getId() const; 
private: 
    string name; 
    int sid; 
}; 

void studentType::setData(string, int) { 
    name = ??; 
    sid = ??; 
} 

string studentType::getName() const { 
    return name; 
} 

int studentType::getId() const { 
    return sid; 
} 

주요가 구성 클래스는? 이미 머리글에 문자열이 정의되어 있습니다. 네, 네임 스페이스 표준을 사용하는 것을 알고 있습니다. 선호하지만 당신은 대신하지만 클래스에 대한 생성자를 사용한다

답변

1
int id; 
string name; 
cout << "enter name and code of item1: "; 
cin >> name >> id; 
object.setData(name, id); 
cout << "enter name and code for item2: "; 
cin >> name >> id; 
object.setData(name, id); 

단순화를 위해입니다되지 않습니다

cin >> name >> id; 
studentType object(name, id); 
: 당신은 다음 올바른 이름과 ID 사용하여 객체를 초기화 할 수 있습니다

class studentType { 
public: 
    studentType(string name, int sid) 
     : name(name) 
     , sid(sid) 
    { } 
// ... 

하지만 저는 현재 자습서 또는 과정에서 생성자가 곧 나타날 것이라고 생각합니다.

+0

우리는 이미 그것을 배웠습니다. 이러한 "문제"에 대한 아이디어는 클래스, 구조체, 배열과 같은 특정 요소를 테스트하는 것입니다. 위대한 도움! –

0
cin >> object.setData() >> object.setData(); 

>> 운영자는 object.setData를 호출하지 않습니다; 참조를 취하여 추출 된 입력에 참조 내용을 설정합니다. 식 object.setData()은 void를 반환하는 함수를 호출합니다. 물론 >> 연산자는 void 인수를 사용할 수 없습니다. 또한 은 stringint을 필요로하기 때문에 funcall에 충분한 인수가 없습니다.

먼저 cin 값 다음 setData 함수를 호출하여 main()

void studentType::setData(string name, int sid) { 
    this->name = name; 
    this->sid = sid; 
} 

과 :

std::string name; 
int num; 
cin >> name >> num; 
object.setData(name, num); 
0

귀하의 setData 기능과 같은 수 있습니다 :

이 작업을 수행해야 , 즉

012 당신은 이름과 코드를 얻을 수 cin를 사용하는 경우이 , 이름은 하나의 단어가 될 수 있습니다

주의 그냥 참고 3,. 두 단어의 이름을 쓰는 경우 첫 단어는 이름에 넣고 두 번째 단어는 코드에 넣으려고합니다.

간단히 말해 cin은 공백으로 구분됩니다.

0

당신이 찾고있는 것은 std::getline()입니다. 나는 당신의 정수를 얻기 위해 cin을 사용할 것이지만, 문자열은 그렇지 않을 것이다. 나는 이렇게 사용자 입력을 분리 할 것이다. @Suhaib Ahmad처럼, cin은 공백으로 구분됩니다. 공백을 포함한 문자열을 stdin에서 가져 오려면 std::getline()을 사용하십시오.

void studentType::setData(string n, int i) { 
    this->name = n; 
    this->sid = i; 
} 

-

int main(void) { 
    string n; 
    int i; 
    studentType object, number; 

    cout << "Enter name for item1: "; 
    getline(cin, n); 
    cout << "Enter code for item1: "; 
    cin >> i; 

    object = studentType(); // make sure you construct your studentType, I also recommend using a constructor function 
    object.setData(n, i); 

    cout << "Enter name for item2: "; 
    getline(cin, n); 
    cout << "Enter code for item2: "; 
    cin >> i; 
    number = studentType(); 
    number.setData(n, i); 

    system("pause"); 
    return 0; 
} 

인수가 cin 입력이 잘못 저장하는 장소로, 주어지지와 당신이 setData()을 사용하는 방법. 변수를 먼저 선언 한 다음 변수로 클래스를 초기화해야합니다.