我有一个带有char *的类作为私有成员数据。我正在将类的对象传递给<<的运算符重载。如果我不使用const引用,我会收到一条错误,指出char *是私有成员数据。如果我使用const引用,则此错误消失。
当const引用传递对象时是否可以访问私有成员数据,而不是通过引用传递它?
代码:
// .h file
#include <iostream>
using namespace std;
class Flex
{
// The error was caused by having a const in the definition
// but not the declaration
// friend ostream& operator<<( ostream& o, const Flex& f );
// This fixed it
friend ostream& operator<<( ostream& o, Flex& f );
public:
Flex();
Flex( const char * );
~Flex();
void cat( const Flex& f );
private:
char * ptr;
};
// .cpp file
#include <iostream>
#include <cstring>
#include "flex.h"
using namespace std;
Flex::Flex()
{
ptr = new char[2];
strcpy( ptr, " ");
}
Flex::Flex( const char * c )
{
ptr = new char[strlen(c) + 1];
strcpy( ptr, c );
}
Flex::~Flex()
{
delete [] ptr;
}
void Flex::cat( const Flex& f )
{
char * temp = ptr;
ptr = new char[strlen(temp) + strlen(f.ptr) + 1];
strcpy( ptr, temp );
delete [] temp;
strcat( ptr, f.ptr );
}
ostream& operator<<( ostream& o, Flex& f )
{
o << f.ptr;
return 0;
}
// main.cpp
#include <iostream>
#include "flex.h"
using namespace std;
int main()
{
Flex a, b("one"), c("two");
b.cat(c);
cout << a << b << c;
return 0;
}
答案 0 :(得分:1)
当const传递对象时,是否可以访问私有成员数据 引用,而不是通过引用传递?
可见性和const
是正交概念。您可以通过private
参考访问const
成员。
你不清楚你得到的实际错误是什么,或者真正的问题是什么。但是,我猜你已经实现了一个免费的operator<<(ostream&, const MyClass&)
函数,它以某种方式试图修改MyClass::ptr
(或其他一些成员变量)。
如果是这样,那将无效,因为引用为const
。不要修改它的成员。