说我有原型,
void display(const someStruct& ptr);
void display(const someStruct& ptr, int arraySize);
其中ptr的类型为
simeStruct *ptr = new someStruct[arraySize];
说结构有很多成员,显然,ptr已经被用来填充。现在,如果我想显示第一个索引,我将其称为
someNamespace::display(pKingdom[0]);
实施,
void display(const someStruct& ptr) {
cout << ptr.someMember1 << ", " << ptr.someMember2;
}
如果我通过将其称为
来使用重载函数,我是否可以调用整个结构simeNamespace::display(ptr[arraySize], arraySize);
或该电话无效?在编译时,是否尝试从第一个单元格打印,或者是否因为调用不正确而打印垃圾?
编辑:忘记了重载函数的实现void display(const someStruct& ptr, int arraySize) {
cout << "SomeOutput is" << endl;
for (int i = 0; i < arraySize; i++) {
cout << i + 1 << ". " << ptr.someMember1 << ", " << ptr.someMember2;
}
}
答案 0 :(得分:1)
如果void display(const Foo& ref, int arraySize)
函数等待对象Foo通过,则接受它的引用,这意味着你的方法能够直接改变原始的Foo(const
会阻止它,但正如@aschepler所提到的那样,它仍然可能)
要访问您分配的内存,您想要传递指针,它会像:
void display(const Bar* ptr, int arraySize) {
for (int i = 0; i < arraySize; i++) {
std::cout << i + 1 << ") " << ptr[i].a << ", " << ptr[i].b << "\n";
}
}
使用display(barPtr, arraySize);
其中Bar *barPtr = new Bar[arraySize]
。或者,如果你还想通过引用传递,请执行以下操作:
void display(const Bar (&ref)[100], int arraySize) {
for (int i = 0; i < arraySize; i++) {
std::cout << i + 1 << ") " << ref[i].a << ", " << ref[i].b << "\n";
}
}
在这种情况下,您需要在声明中编写大小(例如100,它可以是变量),并使用display(bar, arraySize);
,其中Bar bar [arraySize]
。当然你可以使用模板:
template <unsigned int N>
void display(const Bar (&ref)[N]) {
for (int i = 0; i < N; i++) {
std::cout << i + 1 << ") " << ref[i].a << ", " << ref[i].b << "\n";
}
}
用法来到display<arraySize>(bar);
,其中Bar bar [arraySize]
是您的实际对象。但是,在这种情况下,我建议你使用容器,例如vector
。