2011-12-17 3 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

Следует отметить, вам, что в качестве параметра 'полукокса п [100]' идентична 'полукокса п [99],' символ п [] 'и 'char * n'. То есть, фактический тип параметра является указателем на char, а число игнорируется. –

ответ

2

Это example my_instance_of_example(n).

Следует отметить, однако, что использование массивов символов для строк - это не то, что вы делаете на C++. Вместо этого вы должны использовать std::string, это дает вам гораздо большую гибкость.

+0

Если я делаю пример ex (n), он говорит, что пример ex был ранее объявлен – System

+1

Это потому, что вы уже объявили (и построили его) прямо в начале main. Вы должны объявить его только один раз. –

+0

это сработало, но что, если бы я хотел использовать ex-объект где-то раньше в главном, поэтому мне нужно было объявить его в начале? – System

2

Easy:

#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: Я мог бы так поступить и использовать 'std :: move' в ctor, но, знаете, я мог бы просто просто прост. :) – Xeo

Смежные вопросы