在引用或指针返回类型函数上输入
input on reference or on pointer return type functions
我已经编写了以下代码,但我不知道它为什么有效。
#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;
}
所以我认为让它工作的原因是 float&getprice() 通过引用返回价格,因此对其所做的输入将对其内存位置产生影响,char*getid() 返回指向 id 的第一个存储单元的指针,默认情况下对数组的更改将生效,因为它是通过引用发送的(默认情况下),我认为 char*getname() 也是如此;
你的假设是正确的。 getprice() 返回对类成员的引用,然后调用者可以修改该引用。对于char*
,有一个特殊的重载将它们视为字符串。由于仅按值返回指向实际字符串的指针,因此可以再次修改实际字符串。
如果你想避免这种行为,你可以将const
关键字添加到你的返回值中
相关文章:
- 如果我更改函数输入,我的递归不起作用?
- 初始化与函数输入相关的全局数组
- 如何生成比用户使用 rand() 函数输入的数字大 5-10% 的数字?
- 将函数更改为具有设置函数输入变量的方法的类
- 如何避免将 const 和非 const 成员函数输入到模板中的代码重复
- 是否有一种方法可以避免标头文件中使用的constexpr函数输入全局范围,而无需额外的名称空间
- 迭代器作为C 中的函数输入
- 如何为作为雇员类的指针传入的构造函数输入数据
- 最小的函数输入和输出错误
- C++ 函数输入错误
- QComboBox 作为 QT 中的函数输入参数
- 函数输入之前的分割故障
- 如何在视觉工作室 2012年设置函数输入参数的颜色
- 函数输入变化
- 使用函数输入 1 个 int 和 1 个字符串数组并循环
- 将数组用于函数输入参数
- 如何在c++中将函数输入强制转换为智能指针
- 自定义检查器的覆盖率引用函数输入
- 为什么我不能使用两个scanf函数输入字母
- 犰狳cov函数输入