C++ 引用或指针返回类型函数的输入

C++ 引用或指针返回类型函数的输入,c++,class,pointers,input,reference,C++,Class,Pointers,Input,Reference,我已经写了下面的代码,但我不太清楚为什么它能工作 #include<iostream> #include<cstring> using namespace std; class temp_class { private: char id[20]; char name[20]; float price; public: temp_class(); char*getid(); char*getname(); float&

我已经写了下面的代码,但我不太清楚为什么它能工作

#include<iostream>
#include<cstring>
using namespace std;
class temp_class
{
private:
    char id[20];
    char name[20];
    float price;
public:
    temp_class();
    char*getid();
    char*getname();
    float&getprice();
    void print()const;
};
temp_class::temp_class()
{
    strcpy(id,"unknown");
    strcpy(name,"unknown");
    price=0.0;
}
char*temp_class::getid(){return id;}
char*temp_class::getname(){return name;}
float&temp_class::getprice(){return price;}
void temp_class::print()const
{
    cout<<"ID : "<<id<<" / Name : "<<name<<" / Price : "<<price<<endl;
}
int main()
{
    int i=0;
    int n=0;
    cout<<"Enter Number of Items : ";
    cin>>n;
    temp_class*T=new temp_class[n];
    for(;i<n;i++)
    {
        cout<<"Enter ID,Name,and price for Item "<<i+1<<" : ";
        cin>>T[i].getid()>>T[i].getname()>>T[i].getprice();//the user will input on the 
    }                                                    //returned data members 
    for(i=0;i<n;i++)                                        //but why it worked ?
    { 
        T[i].print();
    }
    return 0;
}
#包括
#包括
使用名称空间std;
临时班
{
私人:
字符id[20];
字符名[20];
浮动价格;
公众:
temp_class();
char*getid();
char*getname();
float&getprice();
无效打印()常量;
};
临时类::临时类()
{
strcpy(id,“未知”);
strcpy(名称,“未知”);
价格=0.0;
}
char*temp_类::getid(){return id;}
char*temp_类::getname(){return name;}
float&temp_类::getprice(){return price;}
void temp_类::print()常量
{

cout您的假设是正确的。getprice()返回对类成员的引用,调用方可以修改该类成员。对于
char*
,有一个特殊的重载将它们视为字符串。因为只有指向实际字符串的指针是按值返回的,所以可以再次修改实际字符串


如果你想避免这种行为,你可以在返回值中添加
const
关键字,你的问题是?我想你最好使用
std::string
而不是
char*
/
char[]