2016-08-12 10 views
1

どのように私はメンバー関数からメイン関数にプライベートchar "n"を返すことができますか?メンバー関数からプライベートchar配列を返す方法は?

#include <iostream> 
using namespace std; 
class TEST 
{ 
    char n[10]; 
public: 
    char getname() 
    { 
     cout<<"what's your name?:"; 
     cin.getline(n,10); 
     return n; 
    } 
}; 
int main() 
{ char name[10]; 
    TEST obj; 
    name[10]=obj.getname(); 
    cout<<"Name :"<<name; 
} 
+1

'std :: string'はどうですか、それともそれに対して任意の制限がありますか? – chris

+0

あなたは本当にプライベートだと思っていますか? – juanchopanza

+0

関数から配列を返すことはできず、配列に代入することもできません。また、 'name [10]'は範囲外操作です。良い本[ここ](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)のリストがあります。 – molbdnilo

答えて

0

プライベートまたはパブリックは問題ではありません。あなたの問題はchar*の代わりにcharです。

文字配列の代わりに文字列を使用することをお勧めします。

#include <iostream> 
using namespace std; 
class TEST 
{ 
    char n[10]; 
public: 
    char* getname() 
    { 
     cout<<"what's your name?:"; 
     cin.getline(n,10); 
     return n; 
    } 
}; 
int main() 
{ 
    char* name; 
    TEST obj; 
    name = obj.getname(); 
    cout<<"Name :"<<name; 
} 
+0

たぶん、いくつかの情報...それは愚かな質問だ場合、私は笑まだC++に新たなんだ申し訳ありませんが、私はそれを理解すると思いますか? –

+1

'name = obj.getname();'のためにコンパイルされません。 – songyuanyao

+0

@songyuanyao私はそれをテストする、それは正しいです、あなたは主な機能の配列の代わりにポインタを使用する必要があります。 –

0

は、どのように私はmain関数にメンバ関数からプライベート文字「n」を返すことができますか?

クラスのprivateラベルの下にある文字配列の最初の要素へのポインタを返すことができます。そのためには、getname関数の関数定義をchar *getname()に変更する必要があります。

また、mainで行ったエラーをご指摘したいと思います。

#include <iostream> 
using namespace std; 
class TEST 
{ 
    char n[10]; 
public: 
    char* getname() 
    { 
     cout<<"what's your name?:"; 
     cin.getline(n,10); 
     return n; 
    } 
}; 
int main() 
{ 
    TEST obj; 
    char *name = obj.getname(); 
    cout<<"Name :"<<name; 
} 

をしかし、あなたのクラスのプライベートメンバへの参照やポインタを返すのは良い習慣ではありません。私のバージョンを見ています。内部実装の詳細を公開すると、カプセル化に違反する可能性があります。クラスのプライベートデータメンバーへのアクセスを提供する代わりに、プライベートデータメンバーに対して望ましい操作を実行するメンバー関数を定義することができます。

また、using namespaceを使用しないでください。

関連する問題