一个C++重载的问题

#include <iostream>
using namespace std;

class Vector
{
public:
Vector(const Vector & Vec);
int operator()(){ return Length; }
double operator[](int n){ return V[n]; }
private:
double *V;
int Length;
};

int main()
{
return 0;
}

Vector::Vector(const Vector & Vec)
{
Length = Vec();
V = new double[ Length ];
for(int i = 0 ; i < Length ; i++ )V[i] = Vec[i];
}
1>------ 已启动生成: 项目: Chapter 6, 配置: Debug Win32 ------
1>正在编译...
1>Test.cpp
1>g:\c\visual studio 2010\chapter 6\chapter 6\test.cpp(23) : error C3848: 具有类型“const Vector”的表达式会丢失一些 const-volatile 限定符以调用“int Vector::operator ()(void)”
1>g:\c\visual studio 2010\chapter 6\chapter 6\test.cpp(25) : error C2678: 二进制“[”: 没有找到接受“const Vector”类型的左操作数的运算符(或没有可接受的转换)
1> g:\c\visual studio 2010\chapter 6\chapter 6\test.cpp(9): 可能是“double Vector::operator [](int)”
1> 试图匹配参数列表“(const Vector, int)”时
1>生成日志保存在“file://g:\C\Visual Studio 2010\Chapter 6\Chapter 6\Debug\BuildLog.htm”
1>Chapter 6 - 2 个错误,0 个警告
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

最后面那个构造函数这么改:
Vector::Vector(const Vector & Vec)
{
Length = Vec();
V = new double[ Vec.Length ];
for(int i = 0 ; i < Length ; i++ )V[i] = Vec.V[i];
}

另外你的operator []操作符建议写两个,分别用于const对象和非const对象:

double& operator[](int n){ return V[n]; }

double operator[](int n)const{return V[n];}
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-03-21
int operator()()const{ return Length; }
double operator[](int n) const{ return V[n]; }

求助,关于一道C++函数重载的问题
你有这样的问题大概是因为双目操作符比如*,可以有x.operator*(y)这种写法吧? 但是这个不改变*是二目操作符的事实。C++规定:双目操作符重载作为成员函数时只能有一个形参,调用方为左操作数,形参为右操作数。所以x.operator*(y)等价于x*y。2、重载的是后置++。后置++重载作为成员函数时跟你...

C++重载的问题
友元运算符,所以不是成员函数 通过.访问的全都不是

C++ <<重载问题!
Point(int x=0, int y=0) { px=x;py=y;} friend ostream& operator<<(ostream &x,Point pt); \/\/重载"<<"运算符的函数声明 \/\/把void换成ostream& };ostream& operator <<(ostream &x,Point pt) \/\/重载"<<"运算符的函数头 \/\/把void换成ostream& { x<<"("<...

c++重载的一个问题
在这一行首部添加 friend。参数const str s可以改为const str & s,传引用稍稍高效,免去了实参到形参的复制。顺带提一下:<< 输出运算符决不要弄成 成员运算符。否则用起来很怪异:比如你的对象名字叫obj,那么你得这样调用输出 : obj<<cout;...

c++重载问题
问题是在你的第八行:A & operator =(A & a)解决:A & operator =(const A & a)分析如下:函数fun在return 类A时,编译器需要在主调函数里创建一个临时类常量,以便能够将它赋值给主调函数里的a1.由于在主调函数里代码是a1=fun(),等号右边是个常量(分析如前),但在等号操作符重载里你...

一个关于C++重载的问题
因为你只输入了方阵的第一行的10位和第二行的两位,其余的都没有初始化,会变成随机数 希望对您有用*\/ { ptr = new int[m * n];} ~Array2(){ delete [] ptr;} assistant operator [](int i)\/\/重载下标运算符 { assistant assis;assis.aPtr=ptr;assis.n=size2;assis.i=i;return ...

关于C++的重载的问题
按照你原来的代码的话只能return一个Person类型的内容 如果需要返回字符串的话就需要将返回值修改为相应的类型。参考代码:将类中对operator ==的声明改为:char * Person::operator ==(Person c);重载实现:char * Person::operator ==(Person c){ if(m_id==c.m_id){ cout<<"ids are equal...

一个C++重载的问题
最后面那个构造函数这么改:Vector::Vector(const Vector & Vec){ Length = Vec();V = new double[ Vec.Length ];for(int i = 0 ; i < Length ; i++ )V[i] = Vec.V[i];} 另外你的operator []操作符建议写两个,分别用于const对象和非const对象:double& operator[](int n){ ...

简单C++重载问题
因为你重写C0的虚函数数不规范,导致系统认为你写的是另一个函数,具体如下:在 C0 中为 void Set1(int i);在 C1 中为 int Set1(float i);系统判定虚函数有三个要求:1.与基类函数同名;2.有相同的参数个数及对应类型;3.有相有返回值或满足类型兼容规则的指针,引用的返回值;你写的函数只有...

关于C++重载的一个问题求解~~
如,C++本身支持下面的转换 char a = '0';int i = (int)a;或者写成int i = int(a);现在有了如上定义,也有类似的形式了 complex a;double i = double(a);这样可以将类complex的对象转换为double,因为上面的重载提供了这样的转换方法。

相似回答
大家正在搜