#include
using namespace std;
template
class Pair{
public:
T1 key;
T2 value;
Pair(T1 k, T2 v): key(k), value(v){};
bool operator < (const Pair & p)const;
};
template
bool Pair::operator < (const Pair & p) const{
return key < p.key;
}
int main()
{
Pair student("Tom", 19);
// 编译器由类模板生成类的过程叫类模板的实例化
// -编译器自动用具体的数据类型
// -替换类模板中的类型参数, 生成模板类的代码
// 由类模板实例化得到的类叫模板类
// -为类型参数指定的数据类型不同, 得到的模板类不同
Pair score("Tim", 98.5);
作者归档:隋辨
函数模版
//7-2 函数模板
#include
using namespace std;
template
void Swap(T & x, T & y)
{
T tmp = x;
x = y;
y = tmp;
赋值运算符的重载
赋值运算符的重载
赋值运算符 ‘=’ 重载
-
赋值运算符 两边的类型 可以 不匹配
- 把一个 int类型变量 赋值给一个 Complex对象
- 把一个 char * 类型的字符串 赋值给一个 字符串对象
- 需要 重载赋值运算符 ‘=’
- 赋值运算符 “=” 只能重载为 成员函数
编写一个长度可变的字符串类String
-
包含一个char * 类型的成员变量
- 指向动态分配的存储空间
- 该存储空间用于存放 ‘0’ 结尾的字符串
string s = "hello"; // =是初始化语句
string s;
s = "hello"; //赋值语句
s1 = s2:拷贝
- 浅拷贝 : 复制地址给s1的str,缺点是共用一块内存不安全
- 深拷贝 : 分别用不同的内存
//在 class MyString 里添加成员函数 :
String & operator=(const String &s)
{
if (str)
delete[] str;
str = new char[strlen(s.str) + 1];
strcpy(str, s.str);
return *this;
}
以上代码在执行自己赋值给自己的时候出问题
s = s;
//正确写法:
String &String::operator=(const String &s)
{
if (str == s.str)
return *this;
if (str)
delete[] str;
if (s.str)
{ //s.str不为NULL才会执行拷贝
str = new char[strlen(s.str) + 1];
strcpy(str, s.str);
}
else
str = NULL;
return *this;
}
对 operator = 返回值类型的讨论
void好不好?
考虑: a = b = c; 等价于a.operator=(b.operator=(c));
String 好不好?
为什么是 String &
运算符重载时, 好的风格 — 尽量保留运算符原本的特性
考虑: (a=b)=c; //会修改a的值
分别等价于:
(a.operator=(b)).operator=(c);
运算符重载的基本概念
运算符
C++预定义表示对数据的运算
- +, -, *, /, %, ^, &, ~, !, |, =, , != ……
- 只能用于基本的数据类型
- 整型, 实型, 字符型, 逻辑型……
自定义数据类型与运算符重载
C++提供了数据抽象的手段:
用户自己定义数据类型 — 类
- 调用类的成员函数 –> 操作它的对象
类的成员函数–> 操作对象时,很不方便 - 在数学上, 两个复数可以直接进行+/-等运算
Vs. 在C++中, 直接将+或-用于复数是不允许的
运算符重载
对抽象数据类型也能够直接使用C++提供的运算符
- 程序更简洁
- 代码更容易理解
例如: - complex_a和complex_b是两个复数对象
- 求两个复数的和, 希望能直接写:
complex_a + complex_b - 对已有的运算符赋予多重的含义
- 使同一运算符作用于不同类型的数据时 有 不同类型的行为
目的 - 扩展C++中提供的运算符的适用范围, 以用于类所表示的抽象
数据类型
同一个运算符, 对不同类型的操作数, 所发生的行为不同
- (5,10i) + (4,8i) = (9,18i)
- 5 + 4 = 9
运算符重载的实质是函数重载
返回值类型 operator 运算符(形参表)
{
……
}
在程序编译时:
- 把含运算符的表达式–>对 运算符函数 的调用
- 把 运算符的操作数 –> 运算符函数的 参数
- 运算符被多次重载时, 根据 实参的类型 决定调用哪个运算
符函数 - 运算符可以被重载成普通函数
- 也可以被重载成类的成员函数
运算符重载为普通函数
Complex operator+ (const Complex & a, const Complex & b)
{
return Complex( a.real+b.real, a.imaginary+b.imaginary);
}
- 重载为普通函数时, 参数个数为运算符目数
运算符重载为成员函数
只需要一个参数
class Complexs
{
public:
Complex(double r = 0.0, double m = 0.0) : real(r), imaginary(m) {} // constructor
Complex operator+(const Complex &); // addition
Complex operator-(const Complex &); // subtraction
private:
double real; // real part
double imaginary; // imaginary part
};
// Overloaded addition operator
Complex Complex::operator+(const Complex &operand2)
{
return Complex(real + operand2.real,
imaginary + operand2.imaginary);
}
// Overloaded subtraction operator
Complex Complex::operator-(const Complex &operand2)
{
return Complex(real - operand2.real,
imaginary - operand2.imaginary);
}
int main()
{
Complex x, y(4.3, 8.2), z(3.3, 1.1);
x = y + z;
x = y - z;
return 0;
}
Typecho实现代码高亮
- 在Prism定制自己的风格样式,下载 prism.js prism.css 文件。
- 把下载下来的js和css文件上传到当前Typecho的主题目录,即 usr/themes/主题名 目录下。
- 登陆进入Typecho的后台,点击“控制台” -> “外观”。
- 点击“编辑当前外观” -> “header.php”,在左边的代码框中找到””,在它之前输入
刘鑫、射雕英雄传和精致的利己主义
近来偷闲看完《射雕英雄传》,一些情节在小时候看来平平无奇,早已忘记,现在看来却十分诧异。不说江南七怪和丘处机为承诺,花十八年时间找寻忠义之后并抚养成才,也不说裘千仞意识到自己无心无义于是纵身跳崖,更不说主线上一人是认贼作父,众叛亲离,为了富贵不可限量出卖国家,一人是侠肝义胆,忘却权势,抛弃锦绣生活死守襄阳城。单是看郭靖花大把银两请叫花子,就已经感叹侠义之至了。
网民的愤怒淹没了刘鑫——很侠义的行动和不侠义的刘鑫。
原因是一年前,刘鑫在日留学,和男友陈世峰分手后,其男友一直紧追不舍。她因此借住到朋友江歌的处所。刘鑫先一步进入公寓,江歌在挡在门外劝说,无效,陈世峰掏出刀子,刀刀毙命。
事发之后,刘鑫没有透露凶手是谁,对江歌的牺牲毫无谢意。直到日本方面告知,江歌妈妈才确认自己的猜想。但刘鑫拒绝承认江歌的舍生取义,对朋友的死避而不谈。江歌的悲惨遭遇和江歌妈妈的绝望痛楚化作了中国网民的愤怒。
网民的极度愤怒反而不在陈世峰,这种恋爱不成就要杀人的蠢货,自有法律的严惩。但对于刘鑫的指控,却卷席中国互联网。人们渴望一个圆满的故事,希望每一个故事都会有美满的结尾。这次,人们希望江歌的死去不仅仅是肉体的消亡,她的死理应得到道义上的认同。但刘鑫没有回应。
当下一个刘鑫出现的时候,还有人敢成为江歌吗?于是人们愤怒。一年以后的今天,刘鑫也许已承受难以估量的舆论压力,给出了迟到的感谢和承认。此时网民不再领情,江歌妈妈拒绝原谅。
小说是想象力的指南,其架空的世界观却有现实根源。在郭靖所处的世界,生产力低下,来个饥荒洪水就可能裹尸街头,大口喝酒吃肉已是富人的奢举。弱小的人们靠天吃饭,同时也依靠村落和宗族相互帮助。失节事小,饿死事大。因此再自私的人,也必须假称道义,否则稍有不慎就可能威胁生存。常说,穷乡僻壤,民风淳朴,大概如此。
到现代大都市,千百万人来去匆匆,生存已不是负担。于是人们离开宗族,离开村落,邻里的联系也可有可无,成为了孤立的原子。社会契约和职业的明确分工的存在,人得以“即插即用”。离开不是难事,羽毛就变为不是那么重要的事。对于缺乏同理心的人而言,逃避责任、尽量大事化小小事化无,也是利益最大化的“明智”之举了。
刘鑫本以为可以息事宁人,却被怒潮淹没。尽管网络暴力有诸多不可取,却仍有不少人拍手称快。网民变为事实上的道义共同体,纠正陌生人社会中的道德失格。——如果之前仔细观察微博和朋友圈,那你就会意识到你正处于一种宏大的社会结构之中。通过多点触控,无数比特发射至移动基站,传输到终端服务器,原本原子化的个人,在此处迸发一股巨力,可以想见,刘鑫在之后的毕业、交友、工作、求偶,哪怕是上街买东西,会遇上怎样的事。
前几年,钱理群教授说一些大学培养着一些精致的利己主义,我正憧憬大学,想着到大学有时间了,肯定会关心蔬菜瓜果,关心世上的每一个人,怎么可能像他说的那般。
可是世事难预料,时间是没有了,要用来提升自我,要把时间当作朋友,要刻意练习,要懂得一万小时定律,才可以成为更好的自己啊,科科。要不然也要放飞自我,把生命当成旅行,不翘课的大学哪里算青春,去一次西藏和丽江,洗涤一下灵魂啊!
可见关心人类是关心不了的,国际歌都没听过了嘛,只有为了自己才可以好好维持得下去的样子。我到是不信北大有多少利己主义者,虽说那些考高分的狠人对于自我可能有很大偏执,但好歹是top唱过《燕园情》的人,也应该有不少责任感吧。总比我这样“粗糙的利己主义”好多了吧。
说什么是利己主义,就是在心里产生疑问的那一刻。有人说可以刷单赚钱的时候:刷还是不刷?入党的时候:入还是不入?室友睡觉的时候:吃鸡还是吃?一般还会接上一句:对我有什么好处?这时候周围对人没什么道德压力,网络谴责又山高皇帝远,况且它注意力还只往猎奇的跑,这时候就只有康德头上的星空跟道德法则了,做的对没人赞赏,做错了又不会引起什么后果,所以我建议一起做一个雷锋日记APP,记录好事弘扬真善美,打赏666好事再来一件,然后来个滴滴好事,自主O2O帮忙系统,这不是共享时间经济吗?就差物质极大丰富就半条腿迈入共产主义了!
然而理想很激凸,现实很平乳。有些道理只能律己,不能律人,网络的谴责不是长久计,关键只能靠良心。郭大侠说:侠之大者,为国为民。司败得焖说:能力越大,责任越大。古人诚不欺我!科科!
唵
她会不会有一种后现代主义浸猪笼的感觉?