[C++]operator overlord
来源:互联网 发布:优酷网络大电影申报 编辑:程序博客网 时间:2024/06/06 04:31
本文,记录C++所有运算符重载的实现。
学习参考:
- 在线文档:http://en.cppreference.com/w/cpp/language/operators
- 《C++ primer plus》第11章 使用类
- 操作符重载
- 友元对操作符重载的影响
注意:普通类与模板类是有区别的。
<<流输出
error: need ‘typename’ before ‘std::vector<elemType>::const_iterator’ because ‘std::vector<elemType>’ is a dependent scope
链接
原定义:
std::vector<elemType>::const_iterator it;
所以,将定义改为:
typename std::vector<elemType>::const_iterator it;
因为在模板类里面,因为同样定义为模板,而迭代器在模板当中,也适当添加typename(模板的类型说明关键字)
warning: friend declaration 'std::ostream& operator<<(std::ostream&, const Bag<valType>&)' declares a non-template function [-Wnon-template-friend]
friend ostream& operator <<(ostream &os, const Bag<valType> &bag);
^
链接
所以,将声明改为:
template <typename T> friend inline ostream& operator <<(ostream &os, const Bag<T> &bag);
友元函数并不是成员函数,所以,应该重新声明为模板,即添加:template <typename T>
error: conversion from 'std::__cxx11::list<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char> > >::const_iterator {aka std::_List_const_iterator<std::__cxx11::basic_string<char> >}' to non-scalar type 'std::__cxx11::list<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char> > >::iterator {aka std::_List_iterator<std::__cxx11::basic_string<char> >}' requested
typename std::list<valType>::iterator it = _elem.begin();
^
链接
所以,将类型改为:
typename list<T>::const_iterator cit = bag._elem.begin();
因为原来的参数被定义为const,所以,迭代器也应该使用const_iterator
=赋值
[C++]copy constructor and copy assignment operator
归纳
操作符表示法中,操作符左侧的对象是调用对象,操作符右边的对象是作为参数被传递的对象。
c = a + b;
将被装换为
c = a.operator+(b);
这里,a是调用对象,b是被传递的对象。
成员函数还是非成员函数?
Time operator+(const Time &t) const;//member function
firend Time operator+(const Time & t1, const Time &t2);//non-member function
加法操作需要两个操作数
- 成员函数:一个操作数通过this指针隐式传递,另一个作为函数参数显式传递
- 友元函数:两个操作数都操作参数传递
t1 = t2 + t3;
可被解析为下面任意一个
t1 = t2.operator+(t3);
t1 = operator+(t2, t3);
但不能同时定义两个,因为两个格式都与同一个表达式匹配,会被市委二义性错误,导致编译错误。
阅读全文
0 0
- [C++]operator overlord
- operator.c
- C++Operator
- C + + operator precedence list
- [C++]C++ Operator Precedence
- c语言 cast operator
- C++operator用法.
- C++operator<<函数
- C++operator重载问题
- [C++]operator--重载
- c++---operator重载++,--
- C语言中的Operator
- 学习C++(operator new 和 operator delete)
- c++operator new/new operator、operator delete/delete operator的区别与联系
- 奇怪的C++operator重载
- [C++] Expression : invalid operator < 解决方法
- [C++] Expression : invalid operator < 解决方法
- [C++] Expression : invalid operator < 解决方法
- BAT蘑菇街等Java社招面试总结一二
- [C++]friend
- 第八届ACM校赛->康娜的表情包
- [C++]new/delete
- ms
- [C++]operator overlord
- 迷茫请看这里
- 转载:深入理解STL源码(1) 空间配置器(allocator)
- Redis高级命令
- 学习1:ROS的安装
- redis主从复制
- Java 内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式总结
- 461. Hamming Distance
- redis配置哨兵模式