C++ Primer学习笔记
2009-07-25 20:30
155 查看
学习完一个知识点后写上自己的理解。算是总结吧,加深一下自己的印象,也可以在以后复习的时候方便查看
不喜欢按部就班的看一本书,一两百的都懒得看,别说C++ Primer这样的上千页巨书。今天从重载操作符开始看。发现一个又一个问题,然后再翻阅前面的章节去解决问题,解决的过程中再次发现问题,再次翻阅其他章节。喜欢这样的看书方式。可以让我安心的在电脑前坐一天,对于我来说很不可思议了。
加油加油!
!
14.1关于运算符的重载
存在的意义:目前看来就是因为操作符大部分是针对数据的,比如INT型,CHAR型,书中称为内置类型。而当类之间想要用操作符的时候,比如两个类的对象相加,那么就需要去重
载操作符了。重载操作符是为了类而存在的,所以,类型中至少有一个类类型。
重载操作符的定义:
这里把操作符当做函数来定义。只不过比平时的函数多加一个关键字operator。也需要参数和返回值。“类型 operator运算符(类型,类型。。。)”比如+,我们当+是一个函数
,它需要两个参数,X+Y,返回值就是X+Y的结果。
重载操作符可以作为非成员函数,也可以作为类的成员函数。当作为类的成员函数时,参数会少一个。那是因为隐式this指针。因为是在一个类中,所以第一个参数也就默认为是
这个类,所以不用标出。而是隐藏着THIS指针来表示。后面的参数就是要调用的其他的类型参数。
这是目前对已经学的知识的理解,其他的还需继续学习
14.2重载<<输出操作符
哈哈,很有成就感呢。
存在的意义:在输出类的时候直接用“cout<<类名”,这样会变的简便,不用死板的去只能输出变量。
用法:当然了,<<需要去像编辑函数一样编辑<<。
ostream& operator <<(ostream& out,const 类名& s)
第一个参数。毫无疑问,需要定义成ostream类的引用。因为它代表了<<左侧的参数,也就是cout,cout当然是ostream类,为了避免复制,需要定义成引用。第二个参数,就是将
要输出的类。输出值是不应该再改变的,还有避免复制,所以用const的类的引用。返回值是ostream类,不知道什么原理,记下就是了。
下面就该编辑这个“函数”了
#include <iostream>
using namespace std;
class Check
{
public:
void getdata(double ,int);
private:
double book_id;
int title;
friend ostream& operator<<(ostream& out,const Check& s);
//<<的定义必须是非成员函数,因为如果是成员函数,就会省略第一个参数,上面提到的隐式this,表示第一个函数当前类的类型。而我们在使用<<的时候恰恰相反,需要cout在
左边,也就是ostream类是第一个参数。所以必须是非成员函数。从而需要友元它
};
void Check::getdata(double a,int b)
{
book_id=a;
title=b;
}
ostream& operator<<(ostream& out,const Check& s)
{
out<<s.book_id<<"/t"<<s.title;
return out;
}
int main()
{
Check a;
a.getdata(23,1);
cout<<a;
return 0;
}
因为书上只写了如何定义,没有写使用,于是自己摸索着使用成功,所以很高兴。继续下一章了。
不喜欢按部就班的看一本书,一两百的都懒得看,别说C++ Primer这样的上千页巨书。今天从重载操作符开始看。发现一个又一个问题,然后再翻阅前面的章节去解决问题,解决的过程中再次发现问题,再次翻阅其他章节。喜欢这样的看书方式。可以让我安心的在电脑前坐一天,对于我来说很不可思议了。
加油加油!
!
14.1关于运算符的重载
存在的意义:目前看来就是因为操作符大部分是针对数据的,比如INT型,CHAR型,书中称为内置类型。而当类之间想要用操作符的时候,比如两个类的对象相加,那么就需要去重
载操作符了。重载操作符是为了类而存在的,所以,类型中至少有一个类类型。
重载操作符的定义:
这里把操作符当做函数来定义。只不过比平时的函数多加一个关键字operator。也需要参数和返回值。“类型 operator运算符(类型,类型。。。)”比如+,我们当+是一个函数
,它需要两个参数,X+Y,返回值就是X+Y的结果。
重载操作符可以作为非成员函数,也可以作为类的成员函数。当作为类的成员函数时,参数会少一个。那是因为隐式this指针。因为是在一个类中,所以第一个参数也就默认为是
这个类,所以不用标出。而是隐藏着THIS指针来表示。后面的参数就是要调用的其他的类型参数。
这是目前对已经学的知识的理解,其他的还需继续学习
14.2重载<<输出操作符
哈哈,很有成就感呢。
存在的意义:在输出类的时候直接用“cout<<类名”,这样会变的简便,不用死板的去只能输出变量。
用法:当然了,<<需要去像编辑函数一样编辑<<。
ostream& operator <<(ostream& out,const 类名& s)
第一个参数。毫无疑问,需要定义成ostream类的引用。因为它代表了<<左侧的参数,也就是cout,cout当然是ostream类,为了避免复制,需要定义成引用。第二个参数,就是将
要输出的类。输出值是不应该再改变的,还有避免复制,所以用const的类的引用。返回值是ostream类,不知道什么原理,记下就是了。
下面就该编辑这个“函数”了
#include <iostream>
using namespace std;
class Check
{
public:
void getdata(double ,int);
private:
double book_id;
int title;
friend ostream& operator<<(ostream& out,const Check& s);
//<<的定义必须是非成员函数,因为如果是成员函数,就会省略第一个参数,上面提到的隐式this,表示第一个函数当前类的类型。而我们在使用<<的时候恰恰相反,需要cout在
左边,也就是ostream类是第一个参数。所以必须是非成员函数。从而需要友元它
};
void Check::getdata(double a,int b)
{
book_id=a;
title=b;
}
ostream& operator<<(ostream& out,const Check& s)
{
out<<s.book_id<<"/t"<<s.title;
return out;
}
int main()
{
Check a;
a.getdata(23,1);
cout<<a;
return 0;
}
因为书上只写了如何定义,没有写使用,于是自己摸索着使用成功,所以很高兴。继续下一章了。
相关文章推荐
- C++ Primer学习笔记1--c++基础篇查缺补漏
- c++ primer(第五版)学习笔记及习题答案代码版(第十五章)面向对象程序设计
- C++ Primer 学习笔记(1)——vector的使用方法
- (2011.09.27)《C++ Primer》第三部分学习笔记汇总——类和数据抽象
- C++ primer (5th) 随想与学习笔记 3 小试牛刀管中窥豹
- C++ primer 学习笔记
- C++ Primer 学习笔记(2)
- C++ Primer(中文第五版)学习笔记
- C++ primer第二次阅读学习笔记(第11章:泛型算法)
- C++ Primer学习笔记2--c++中的数组和指针
- C++ Primer 学习笔记_62_重载操作符与转换 --调用操作符和函数对象
- C++ Primer 学习笔记 — 友元
- C++ Primer学习笔记2--c++ 关联容器
- C++ primer (5th) 随想与学习笔记 6 优先级晦涩难通 新标准更清晰
- c++ primer 学习笔记(3): IO
- C++ Primer 中文版 学习笔记(十六)
- C++ Primer 学习笔记_98_非一般工具与技术 -优化内存分配
- C++ Primer 学习笔记_105_特殊工具与技术 --联合:节省空间的类
- C++ Primer(第4版)-第4部分:面向对象编程与泛型编程——学习笔记
- 【C++ Primer】【学习笔记】【第十六章】模板与泛型编程之一:模板定义