[C/C++ Digestion] – 重载操作符
[C/C++ Digestion] –
重载操作符
作者:
Jason Lee @
http://blog.csdn.net/jasonblog
日期:
2010-04-17
[1]
重载操作符
重载操作符从大的方面来讲可以分为两类:最好或必须作为类的成员函数的,以及相反。而具体地讲,最好或必须作为类的成员函数的有赋值操作符
( = )
、下标操作符
( [] )
、调用操作符
( () )
、成员访问箭头操作符
( ->
,目前列出的操作符都必须为成员函数
)
、星号解引用操作符
( * )
、复合赋值操作符
( +=
等
)
、自增、自减。其它的一些操作符,如算术操作符、相等操作符、关系操作符和位操作符,最好定义为非成员函数,在这种情况下,通常需要将其定义为类的友元函数。当然,还有一些是不建议重载的操作符,如逗号、取地址运算符和逻辑运算符等。
[2]
赋值操作符
赋值操作符必须是类的成员函数,因为编译器需要知道类是否有赋值操作符这个信息。并且,赋值操作符必须返回对
*this
的引用,也就是左操作数
(
对象自身
)
的引用。
同样的,复合赋值操作符也应返回对
*this
的引用。
如下是一段示例代码:
#include <iostream>
using namespace std;
class Demo {
public:
Demo():val(0){}
Demo(int t): val(t){}
Demo(const Demo &demo){ val = demo.val; }
~Demo(){}
Demo& operator=(const Demo &demo){
val = demo.val;
return *this;
}
Demo& operator+=(const Demo &demo){
val += demo.val;
return *this;
}
void showVal(){ cout << val << endl; }
private:
int val;
};
int main(){
Demo d1 = 2;// 首先调用接受整型参数的构造函数创建一个临时对象,再调用复制构造函数
d1.showVal();
Demo d2;
d2 += d1;// 使用复合赋值操作符
d2.showVal();
return 0;
}
通常定义了赋值操作符,那么接着定义复制构造函数和复合赋值操作符是比较合理的。接着又为了体现复制构造函数的运用,直接在实例化
d1
的时候使用了
Demo d1
= 2;
这样的语句,就类似
string
str = “hello”;
先调用对应参数的构造函数创建临时对象再调用复制构造函数。
[3]
下标操作符
相关文档:
http://www.trendcaller.com/2009/05/hadoop-should-target-cllvm-not-java.html
Sunday, May 10, 2009
Hadoop should target C++/LLVM, not Java (because of watts)
< type="text/javascript">
digg_url="http://www.trendcaller.com/2009/05/hadoop-should-target-cllvm-not-java.html";
Over the years, ......
一、提前的话
要说C语言和Linux的关系大家应该都不会陌生,Linux系统内核就是用C语言开发的,所以所有的Linux系统下面 都会有C的编译调试工具,不过这些工具都是命令式的,正式开发的话会很不方便。Fedora在安装的时候可以选择安装Fedora Eclipse,这个IDE很强大,C,C++,Java,Python等等都支持,而且编译,调试和 ......
实现功能:根据配置文件(XXXX.ini)中的内容对XML中节点进行操作,如果XML中存在与配置文件中相同的节点,则根据配置文件将XML文件中相应节点的值进行更新;如果XML文件中不存在配置文件中出现的节点,则在XML中将新节点及值进行插入操作。
◆XML文档结构如下
//------------------------------------------------------ ......
CPU : ARM9 s3c2410
LCD : 规格不明(这个很无奈,但是我所知道的只有一个分辨率)
源码修改:
/linux-2.6.30.4/arch/arm/mach-s3c2410/mach-smdk2410.c
在这个文件中加入framebuffer的初始化数据结构(具体数据参照LCD技术手册)如下:
#include <mach/fb.h> ......