2016-08-12 164 views
1

如何從成員函數返回私人字符「n」到主函數?如何從成員函數返回私人字符數組?

#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*

我建議你使用字符串而不是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

也許一些信息是關於怎麼回事? –

+1

不會爲'name = obj.getname();'編譯。 – songyuanyao

+0

@songyuanyao我測試一下,它是正確的,你必須在主函數中用指針代替數組。 –

0

如何從成員函數專用字符「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