A. C++语言中 operator<<()怎么用
先举个简单例子吧 然后进行说明 写个简单的类 然后重载<<运算符class Data
{
public:
int x;
int y; friend ostream &operator<<(ostream &os,Data &d)
{
os<<"d.x = "<<d.x<<endl;
os<<"d.y = "<<d.y<<endl;
return os;
}
};重载<<的作用是:用于Data类的对象不是基本类型,我们不能直接cout<<a(a为Data类的一个对象); 编译器不知道该这么处理这个对象.但是我们重载了<<,这就提供了一个准则当cout的是Data的对象,就会自动去运用对应于Data对象的<<方式. 当我们cout<<a;的时候,就是把"cout"和"a"作为参数 传给了重载的<<,上面的那个函数体里面,所有的os被形参cout代替,所有的d被被a代替,这个函数里的内容其实就是根据自己的需要写出的一种格式,怎么写都行.最后return os;即 返回一个对象的引用,这样做的目的是使重载后的<<能够连续使用.比如cout<<a<<b<<c;(a,b,c都是Data的对象)如果不return也是没问题的 但就不能上面那样写了 只能分别写cout<<a;cout<<b;cout<<c;了
B. 急急急急急急!!!!c语言中operator是什么意思
operator 就是运算符啊,对啊包括加减乘除在内,但远远不止这些哦,包括什么单目运算符,双目运算符,三目运算符三种,按类型说还有什么位运算符,逻辑运算符啊等等等等。不过常规意义上来说,如果你做一个程序让人输入一个operater,那么对方一般默认是加减乘除这几个(我指简单程序啊)。
至于你说的ch,
Ch是一个跨平台的C/C++脚本解释器,它支持ISO的C语言标准(C90/C99)和C++类库,附带了8000多个函数库并支持众多的工业标准,支持POSIX, socket/Winsock, X11/Motif, OpenGL, ODBC, C LAPACK, GTK+, Win32, XML, 和CGI等等。Ch具有MATLAB的高级数值计算和绘图的功能,且具有良好的交互性,在C/C++语言编程学习方面尤为好用。Ch也是一个可嵌入的脚本引擎,可以无缝地嵌入到已编译的程序中。
利用Ch,C/C++程序无需编译就可以直接在多平台上运行。它实现了一种语言、到处运行的解决方案(One Language for All™)。
C. 我在一个类里重载了赋值运算符,把它声明为类的友元, 编译出错:"operator ="必须是非静态成员。
c++中 有四个操作符不能是全局域中的重载,这四个操作符是:=, ->, operator[ ], operator()。
所以=的重载不能声明成类的友元。而且函数operator=默认是静态成员函数,所以只能访问静态数据成员
你没贴代码,我就举个例子吧:
class A {
public:
A &operator=(A &a); //ok 正确
friend A &operator=(const char *s); //错误,友元不属于成员函数
private:
int _size;
char *_string;
};
D. 怎么解释operator+(8,7)的含义(在C++中)
从c++语法逻辑上讲,operator+(8,7)就是8+7,加号操作符看做一个操作符被重载的函数,8和7是它的参数
但是如果两个操作数都是内置基本类型,是不允许重载的(因为内置类型的运算符已经被定义好,如果允许重载,就有二义性问题了),8,7都是内置int基本类型,所以operator+(int,int)是不允许的,那么operator+(8,7)在编译期就是不合法的了
E. C++ operator=的问题
这里涉及到拷贝构造函数调用get()函数的参数匹配问题。
在拷贝构造函数中,形参是 const num &r,就是说,形参由const修饰,但当调用get()函数时,由于没有显式声明该函数不修改参数的值(事实上也不修改),编译程序认为,用const形参调用非const形参函数时,不能保证get()不修改参数的值,所以发出错误信息,修改方法很简单,只需将get()函数声明为int get()const即可。
第17行没有给出返回值类型,在C中,编译程序会假定为默认的int类型,但在C++中没有这样的默认,所以出错。
这个函数是赋值运算符=重载,应该是这样的:
num &operator=(const num *r) { *x = r.get(); return *thiis;}
F. C++编译错误:'operator <<' is ambiguous
把下面的友元放到类定义里面去
friend ostream & operator << (ostream & output, Office o)
{
output<<"Office:"<<endl;
output<<"层数:"<<o.getcs()<<endl;
output<<"灭火器数:"<<o.getmhqs()<<endl;
return output;
}
G. C++,operator重载的运算符我还是有一点不太懂.就是它的参数.单目的参数,双目的参数都咋写还有前缀和后缀
前缀的++和--是operator++()和operator--()
后缀的是operator++(int)和operator--(int),其中的int是为了让编译器区分调用的是前缀还是后缀运算符,不要使用其中的值。
双目的参数就像operator+(A a, B b)。在一个类里面的双目运算符默认为以该对象作为第一个操作数,也就是B::operator+(A a)就相当于operator+(B b, A a)。
A+B的参数顺序可以自己选择。operator+(A a, B b)和operator+(B b,A a)都是可以的。
重载运算符的参数可以是两个不一样的类。
H. "operator"在C语言里是什么关键字,具体什么功用
1.operator是操作符的意思。operator是C++的关键字,不是C语言当中的,它和运算符一起使用,表示一个运算符函数,理解时应将operator=整体上视为一个函数名。
2.C++中的operator,有两种用法,一种是operator overloading(操作符重载),一种是operator casting(操作隐式转换)。下面分别进行介绍:
1)operator overloading
C++可能通过operator 重载操作符,格式如下:类型T operator 操作符 (),例如重载 +:
template<typename T> class A
{
public:
const T operator + (const T& rhs)
{
return this->m_ + rhs;
}
private:
T m_;
};
又比如STL中的函数对象,重载 ():
template<typename T> struct A
{
T operator()(const T& lhs, const T& rhs){ return lhs-rhs;}
};
2)operator casting
C++可能通过operator 重载隐式转换,格式如下: operator 类型T (),如下所示
class A
{
public:
operator B* () { return this->b_;}
operator const B* () {return this->b_;}
operator B& () {return *this->b_;}
private:
B* b_;
};
A a;
当if(a),编译时,其中它转换成if(a.operator B*()),其实也就是判断 if(a.b_)
I. C++ operator =
operator是个函数,在前面是下有返回类型的,否则会报错无返回类型(假定为int)。
估计是编译器的问题,在VS2008下,不加返回类型会报错。
PS:我们老师说过,书上的不一定正确,一切都要自己运行才能确定。不同编译器运行结果也可能不同
J. c++ 中 operator+和拷贝构造函数同时存在时编译出错 为什么求大侠帮解释
A(constA&o){n=o.n;}
大体来说就是 a+b 的结果是一个临时对象,临时对象不能绑定到A&