【问题标题】:override array index operator覆盖数组索引运算符
【发布时间】:2013-01-27 15:17:05
【问题描述】:

我想在我的班级中覆盖数组索引运算符。这是我正在尝试做的,但没有成功。

class Complex{              
    Complex const& operator[](unsigned int) const; // Read-only access
    Complex& operator[](unsigned int);             // Read/Write access:
};

const Complex& Complex::operator [](unsigned int unsignedInt) const {
    const Complex* temp = this+i;
    return *temp;
}
Complex& Complex::operator [](unsigned int unsignedInt) {
    Complex* temp = this+i;
    return *temp;
}

编辑: 我想做类似的事情:

Complex **c = new Complex[5];    //Create 2D array
c[2] = new Complex();            //Initialize
cout<<*c[2];                     //print by overloading <<

【问题讨论】:

  • 这是做什么的?这段代码有什么问题?
  • 而不是 Complex Complex::const& operator[], Complex const Complex::operator[]
  • 什么意思:你没有成功?
  • Also, in Complex&amp; Complex::operator[],您不能返回指针作为引用。而是返回实际对象。
  • 哎哟:const Complex* temp = this+i; 简而言之,非多音节词,不要这样做

标签: c++ arrays class multidimensional-array operator-overloading


【解决方案1】:

你的函数定义语法错误:

Complex Complex::const& operator[](unsigned int i) const{

返回类型应该被const&amp;注解,显式命名限定Complex::属于函数名operator[]

Complex const& Complex::operator[](unsigned int i) const {

此外,实现似乎是错误的:

const Complex* temp = this+i;
return *temp;

这没有多大意义。您的意思可能是这样的:

Complex temp = *this + i;
return temp;

假设有一个适当的operator+ 过载。尽管在这里很难说出您真正想要哪种语义,因为无论如何Complex 都没有直观的索引访问。

【讨论】:

  • 我想通过声明我自己的 new、delete 和 [] 操作符来创建一个指针数组,即 Complex 类的二维数组。
【解决方案2】:

代替

Complex Complex::const& operator[](unsigned int i) const

应该是

const Complex& Complex::operator[](unsigned int i) const

【讨论】:

    猜你喜欢
    • 2015-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-06
    • 2022-11-17
    • 1970-01-01
    • 2014-01-05
    • 2011-04-12
    相关资源
    最近更新 更多