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

ユーザが名前を付けたときに名前変数にコピーされるように、パラメータでコンストラクタを使いたいとします。どのように私はデフォルトのものの代わりにパラメータでconstructoeを使用できますか? それはexample my_instance_of_example(n)です...C++のコンストラクタのパラメータとしての文字列

+0

パラメータとして、 '文字のn [100]' 'のcharのn [99]' '文字'と同じであり、nは[]という、あなたに指摘されるべきであると'char * n'。つまり、実際のパラメータ型はcharへのポインタであり、数値は無視されます。 –

答えて

2

を私は

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

を試みたが、それらのどれも動作しません。

しかし、文字列にchar配列を使用することは、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

関連する問題