C++ 常量成员函数在这种形式下是如何工作的?
我想知道常量成员函数在这种情况下是如何工作的 自定义数组类:C++ 常量成员函数在这种形式下是如何工作的?,c++,constants,C++,Constants,我想知道常量成员函数在这种情况下是如何工作的 自定义数组类: class Array { private: int m_size; int *m_ptr; // Utility function void set_size( int size ); // Set size of array public: // Constructors Array( int array_size ); // Default constructor Ar
class Array
{
private:
int m_size;
int *m_ptr;
// Utility function
void set_size( int size ); // Set size of array
public:
// Constructors
Array( int array_size ); // Default constructor
Array( const Array ©_array ); // Copy constructor
// Destructor
~Array() { delete [] m_ptr; };
int get_size() const { return m_size; }; // Get size of array
// Overloaded Operators
const Array &operator=( const Array &rhs );
}
const Array &Array::operator=( const Array &rhs )
{
if( this != &rhs )
{
if( this -> get_size() != rhs.get_size() )
{
delete [] m_ptr;
set_size( rhs.get_size() );
m_ptr = new int[ get_size() ];
}
for( int i = 0; i < get_size(); i++ )
{
this -> m_ptr[i] = rhs.m_ptr[i];
}
}
return *this;
}
类数组
{
私人:
国际货币单位大小;
int*m_ptr;
//效用函数
void set_size(int size);//设置数组大小
公众:
//建设者
数组(int数组_大小);//默认构造函数
数组(const数组和copy_数组);//复制构造函数
//析构函数
~Array(){delete[]m_ptr;};
int get_size()常量{return m_size;};//获取数组的大小
//重载运算符
常量数组和运算符=(常量数组和rhs);
}
常量数组和数组::运算符=(常量数组和rhs)
{
如果(此!=&rhs)
{
如果(此->获取大小()!=rhs.获取大小())
{
删除[]m_ptr;
设置大小(rhs.get_size());
m_ptr=newint[get_size()];
}
对于(int i=0;im_ptr[i]=rhs.m_ptr[i];
}
}
归还*这个;
}
我想知道重载的“=”运算符如何首先声明常量?因为成员函数会更改当前对象的值。如果你使用这个函数,你可以在赋值后改变对象的值,只要当前对象本身不是常数。所以我想知道这样声明函数常数有什么意义?在我看来,这要么是打字错误,要么是设计错误。返回引用不应包含常量限定符
Array &Array::operator=( const Array &rhs )
{
//...
}
有一种观点认为,
操作符=
应该返回一个常量引用,以防止像(a=b)=c这样的代码编译。这种观点在C++早期是比较常见的,因为C不允许构造,人们希望C++以相同的方式运行。这几天很少见。是的,我不明白你为什么要这样做。这是书中的一个例子。@anacy经常在书中出现打字错误。在出版一本书之前,很难测试书中所有的例子。