我试图将位于_name中的字符数组传递给名为name的char引用。
但是,当将数组指针传递给引用时,它只显示第一个字符而不是整个字符串。
我的问题是你如何创建一个Character引用数组来将原始指针复制到它然后显示它?如item.cpp中所示,我们将_name指针复制到name的引用中,然后返回name,但它只显示字符串的第一个字符。
我只会显示我的代码的相关部分。
Item.cpp:
void Item::name(const char * name){
strncpy(_name, name , 20);
}
const char& Item::name() const{
char& name = *_name;
return name;
}
ItemTester.cpp:
主():
int main(){
double res, val = 0.0;
fstream F;
SItem Empty;
SItem A("456", "AItem", 200);
SItem B("567", "BItem", 300, false);
//cout << A.name() << endl;
B.quantity(50);
//cout << Empty << endl;
cout << A << endl << B << endl << endl;
cout << "Enter Item info for A: (Enter 123 for sku)" << endl;
cin >> A;
cout << "Copying A in C ----" << endl;
SItem C = A;
cout << C << endl << endl;
cout << "Saving A---------" << endl;
A.save(F);
cout << "Loading B----------" << endl;
B.load(F);
cout << "A: ----------" << endl;
cout << A << endl << endl;
cout << "B: ----------" << endl;
cout << B << endl << endl;
cout << "C=B; op=----------" << endl;
C = B;
cout << C << endl << endl;;
cout << "Operator ==----------" << endl;
cout << "op== is " << ((A == "123") && !(A == "234") ? "OK" : "NOT OK") << endl << endl;
cout << "op+=: A += 20----------" << endl;
A += 20;
cout << A << endl << endl;
cout << "op-=: A -= 10----------" << endl;
A -= 10;
cout << A << endl << endl;
cout << "op+=double: ----------" << endl;
res = val += A;
cout << res << "=" << val << endl << endl;
return 0;
}
ostream写
virtual std::ostream& write(std::ostream& os, bool linear)const{
return os << sku() << ": " << name() << endl
<< "Qty: " << quantity() << endl
<< "Cost (price * tax): " << fixed << setprecision(2) << cost();
}
如果我错过了任何重要的细节并且用它来编辑我的帖子,请告诉我。
答案 0 :(得分:1)
char&
是char
的引用,因此只是一个字符。对字符数组的引用将是char*&
。
示例:
class Test
{
private:
static const size_t maxlen = 100;
char* _name;
public:
Test() : _name(new char[maxlen+1]) {}
~Test() {delete _name;}
void name(const char* s)
{
if(strlen(s) >= maxlen)
throw "too long";
else
{
memcpy(_name, s, strlen(s) * sizeof(char));
_name[strlen(s)] = '\0';
}
}
char*& name()
{
return _name;
}
};
int main()
{
Test obj;
obj.name("testname");
cout<<"Name = "<<obj.name()<<endl;
obj.name()[0] = '*';
cout<<"After change: Name = "<<obj.name()<<endl;
return 0;
}
编辑:
我会改变&#34; getter&#34;类似于:
char*& Item::name() {
return _name;
}
实际上,如果你确实希望方法是&#34; const&#34;,在这个意义上,类的用户不应该更改数组的元素,或者数组的实际地址,那么你不需要返回一个char *&amp ;,你可以简单地返回const char *
const char* Item::name() const {
return _name;
}
据我所知,char*&
类型的目的是客户端能够更改地址的实际地址。
答案 1 :(得分:0)
正如CForPhone指出的那样,char&
并不是你想要的,你可能意味着char*
。但即便如此,使用char*
表示字符串也适用于C.在C ++中,您应该使用std::string
:
const string Item::name() const{
string name(_name);
return name;
}