C++中类成员函数定义的返回值问题,请熟悉的朋友解答。

//头文件
#ifndef VECTOR_H_
#define VECTOR_H_
#include <iostream>
namespace VECTOR
{
class Vector
{
private:
double x;
double y;
double mag;
double ang;
char mode;
void set_mag();
void set_ang();
void set_x();
void set_y();
public:
Vector();
Vector(double n1,double n2,char form = 'r');
void set (double n1,double n2,char form = 'r');
~Vector();
double xval()const{return x;}
double yval()const{return y;}
double magval()const{return magval;}
double angval()const{return angval;}
void polar_mode();
void rect_mode();
Vector operator+(const Vector & b)const;
Vector operator-(const Vector & b)const;
Vector operator-()const;
Vector operator*(double n)const;
friend Vector operator*(double n,const Vector & a);
friend std::ostream & operator<<(std::ostream & os, const Vector & v);
};
}
#endif

//源文件1
#include <iostream>
#include "vector.h"
#include <ctime>
#include <cstdlib>
int main()
{
using namespace std;
using VECTOR::Vector;
srand (time(0));
double direction;
Vector step;
Vector result(0.0,0.0);
unsigned long steps=0;
double target;
double dstep;
cout<<"Enter target distance(q to quit): ";
while (cin>>target)
{
cout<<"Enter step length: ";
if (!cin>>dstep)
{
break;
}
while (result.magval()<target)
{
direction=rand()%360;
step.set(dstep,direction,'p');
result=return+step;
steps++;
}
cout<<"After "<<steps<<" steps,the subject "
"has the following location: \n";
cout<<result<<endl;
result.polar_mode();
cout<<" or\n"<<result<<endl;
cout<<"Average outward distance per step = "
<<result.magval()/steps<<endl;
steps=0;
result.set(0.0,0.0);
cout<<"Enter target distance(q to quit): ";
}
cout<<"Bye.\n";
return 0;
}
另外一个源文件因为字数限制无法粘贴上来,是头文件类中成员函数的定义。
我附上几个我有疑问的定义!
其一:

Vector Vector::operator +(const Vector & b)const
{
return Vector(x+b.x,y+b.y);
}
其二:

std::ostream & operator<<(std::ostream & os,const Vector & v)
{
if(v.mode=='r')
os<<"(x,y)= ("<<v.x<<","<<<<v.y<<")";
else if (v.mode=='p')
{
os<<"(m,a)=("<<v.mag<<","
<<v.ang*Rad_to_deg<<")";
}
else
os<<"Vector object mode is invalid";
return os;
}
其三:
Vector::Vector(double n1,double n2,char form )
{
mode=form;
if (form=='r')
{
x=n1;
y=n2;
set_mag();
set_ang();
}
else if (form=='p')
{
mag=n1;
ang=n2/Rad_to_deg;
set_x();
set_y();
}
else
{
cout<<"Incorrect 3rd argument to Vector()-- ";
cout<<"vector set to 0\n";
x=y=mag=ang=0.0;
mode='r';
}
}
主要问的我后面我附上的三个成员函数的定义,返回值如何理解。

不知这位同学有什么问题
1. 重载+运算符,由于定义值返回,这样构建一个临时对象并返回属正常操作;
2. <<流操作符重载,未见不合理部分
3. 向量构造,显然允许按直角坐标和极坐标,两种方式构造向量
请提供详细问题追问

这个成员函数的定义:
std::ostream & operator<<(std::ostream & os,const Vector & v)
小括号中的(std::ostream & os,const Vector & v)能给我详细的讲解下吗?
还有这个成员函数:
Vector::Vector(double n1,double n2,char form )

追答

这里定义的是类的友元操作符,也就是在类的外面,而又能够访问类中成员的操作符。
操作符 << 需要两个操作数,一个是流对象,也就是 std::ostream &os,这是一个引用参数,另一个是需要加入流的对象,即 const Vector &v,由于<<操作不需要修改对象,因此这里用了const修饰符。
这里面 std::ostream &os 是<<操作符规定好的,不能随意改动,后面参数根据需要随意。

关于构造函数,三个参数中,
如果 form 是 'r',n1和n2就表示直角坐标的x和y
如果 form 是 'p',n1就是极距,n2就是角度(内部转换成弧度)
如果 form是其他内容,按直角坐标0向量处理

追问

const Vector & v 中Vector &v是引用传递吗? 能否还麻烦您给我讲解一下引用传递。 谢谢你!

追答

const Vector &v 是引用传递,但由于带有const修饰,使得函数中不得出现对v变量的修改,否则编译报错
const Vector &v (const引用传递) 和 Vector v(值传递)都可以达到不改变传入参数的效果,但传递时引用的效率较高,不必构建对象副本,只是传递了地址

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-08-20
我擦,晕了
第2个回答  2012-08-20
你要问什么

c++的return返回值的问题。百度有高手吗?这里要写什么
1、Status的字面意义是状态。一般来说,有有这样的定义:typedef int Status;什么意思呢,就是Status被定义为 int。也就是用不同数值的整数来表示不同的状态。编写这行代码的人的想法就是,要用整数这种数据,来表示“状态”的不同。以后你可能还会碰到很多的类似的东西,比如用bool来表示性别男女等等...

C++单选题:定义类A的成员函数A* f(A a)const时,下列哪个适合作为函数的...
首先 A答案: 参数(A a) 是个复制到函数内的局部变量。所以返回一个局部变量的指针,是不可以的。因为函数内局部变量在函数调用结束之后会被释放。B答案: 类A中定义的类型为A*的静态数据成员, 这个是可以的。因为它不受任何限制。所谓static变量,无论是不是在类中,他都是存在程序的全局静态表中。

C++中函数类型与定义的函数返回值类型必须相同么?
C语言中函数返回值类型由( )决定。 A、 return语句中的表达式类型 B、 定义函数时所指明的返回值类型 C、B C语言中函数返回类型和函数返回值 例如函数定义为:int max(int a, int b),这是个函数是获得a,b两个整数值较大的那个,在函数的前面有个int值,说明这个函数返回的是一个整数类型,...

C++编程中返回值问题
int max(int x,int y){ return(x>y?x:y);} 这样的函数体更为简短,只用一个 return 语句就把求值和返回都解决了。(2)返回值的类型。在定义函数时对函数值说明的类型一般应和 return 语句中的表达式类型一致。(3)如果函数值的类型和 return 语句中表达式的值不一致,则以函数类型为准。对...

C++中,调用类的成员函数时出现错误
c\/c++编写的程序通常不进行严格的错误检查,当采用malloc来分配内存而可供分配的地址空间不够的情况下返回null指针。但是代码不检查这种错误,认为地址分配已经成功,于是就访问0X00000000的地址,于是就发生内存违规访问,同时该进程被终止。ASCII字符填充组成的pif文件时会出现以下情况:一个非法的pif文件(用...

C++“函数的返回值”怎么返回,或者是返回到哪里?
返回到调用函数处。相当于中断机制。int fun(){...} 调用函数 int a;a=fun();返回值保存到a变量中了。

返回值C++中的返回值
在C++中,函数可以带有返回值,也可以无返回值。无返回值的函数主要用于完成特定操作,其返回类型应设为void,无需使用return语句。例如,`void backward(int n)`函数用于倒序输出输入整数,如果需要退出,可以在适当位置添加return。在`main`函数中,通过调用这个函数并输出结果来实现。对于有返回值的函数...

C++的函数返回值是什么意思 通俗点讲
C++的函数返回值是由于函数名变量通常用来把函数的处理结果数据返回给调用函数,即递归调用,所以一般把函数名变量称为返回值,函数的返回值类型是在定义函数时指定的。函数可以有返回值,也可以没有返回值:1、没有返回值的函数:功能只是完成一个操作,应将返回值类型定义为void,函数体内可没有return...

C++类成员函数计算数组元素的max和min返回了错误值
using namespace std;class Sales { private:static const int QUARTERS=4;double sales[QUARTERS];public:double average;double max;double min;void set_maxandmin();void set_average();void initSales(double shuzu[],int num){ for(int i=0;i<num;i++)sales[i]=shuzu[i];} void ...

C++编译器(似乎)认错了成员函数返回值类型 怎么办
像这种莫名其妙的问题一般是预编译头过时引起,全部重建以后可能就可以了

相似回答
大家正在搜