2011-12-17 5 views
2
class example { 
private: 
    char Name[100];   
public: 

    example(){strcpy(Name, "no_name_yet");} 
    example(char n[100]){strcpy(Name, n);} 


    }; 



int main() { 
    example ex; 
    char n[100]; 

    cout<<"Give name "; 
    cin>>n; 
     example(); 
    } 

매개 변수와 함께 생성자를 사용하여 사용자가 이름을 제공하면 이름 변수에 복사됩니다. 기본 생성자 대신 매개 변수를 사용하여 생성자를 어떻게 사용할 수 있습니까? 나는 C++의 생성자에서 매개 변수로 사용하는 문자열

example(n) 
example(char n) 
    example(*n) 
    example(n[100]) 

을 시도했지만 그들 중 누구도

+0

이것은, 사용자에게 지적되어야하는 파라미터 '문자 n은 [100]'문자 '와 동일한 N [99]', '숯 N []'과 'char * n'. 즉, 실제 매개 변수 유형은 char에 대한 포인터이며 숫자는 무시됩니다. –

답변

2

그것은 example my_instance_of_example(n)입니다 ... 작동하지 않습니다.

그러나 문자열에 문자 배열을 사용하는 것은 C++에서 수행하는 것이 아니라는 것에 유의해야합니다. 대신 std::string을 사용해야합니다. 유연성이 훨씬 뛰어납니다.

+0

예제 ex (n)을 실행하면 예제 ex가 이전에 선언되었음을 나타냅니다. – System

+1

main의 시작 부분에서 이미 선언 (및 구성)했기 때문입니다. 한 번만 선언해야합니다. –

+0

이 방법이 효과적 이었지만 이전에 어딘가에서 main에서 ex 객체를 사용하고 싶었 기 때문에 처음에 선언해야했습니다. – System

2

쉬운 :

#include <string> 
#include <iostream> 

class example { 
private: 
    std::string name; 

public: 
    example() : name("no name yet"){} 
    example(std::string const& n) : name(n){} 
}; 


int main() { 
    example ex; 
    std::string n; 

    std::cout << "Give name "; 
    std::cin >> n; 
    example ex(n); // you have to give your instance a name, "ex" here 
        // and actually pass the contructor parameter 
} 
+0

복사 생성자를 사용하지 않고 수행 할 수 없습니까? – System

+0

일반적으로 (적어도 C++ 03에서는) 어쨌든 인수를 복사하려면 값으로 전달하십시오. –

+0

@ Björn : 나는 그것을 할 수도 있고 ctor에서'std :: move'를 사용할 수도 있지만, 간단하게 유지할 수도 있습니다. :) – Xeo

관련 문제