C++ Primer Plus的阅读大概到这边也就先暂时告一段落了(因为开学了!!)
然后近期找来了C++ Primer稍微翻了翻觉得确实写得比Plus要好一些,而且加入了C++11的新特性,但是无论哪本书对于这些最基本的功能应用大抵也是差不多的,所以也没觉得看的是Plus就会少学很多东西,况且plus确实是比primer讲得浅显了很多。
写这个系列的初衷其实也是熟悉C++中到底有啥,应该怎么用,故而对于原理基本没有任何挖掘,但想来在日后很多项目以及实战中会对我们以后真切需要的那部分理论会有更深刻的认识(大抵我还是认为多做比多看书有用吧~)
废话不多说咯,本文分为下面几块~
操作符重载:自己定义的class是不能用类似于+,-这种运算的,但有时候真的是需要的,故而可以用operator对我们自己定义的class赋予这些运算的能力。
友元函数:重载操作符时如果重载了类似于class*double,那么显然不能用double*class,这时候就需要我们定义外部的能访问内部变量的函数来拯救世界了。
类的继承:继承一个类所有public部分加上新的东西生成新的一个类,虽然是亲儿子但是private部分还是不允许直接访问。
访问控制protected: 只有在类的继承里有效,相当于专门留给亲儿子继承类的接口,里面的东西对于继承类相当于public但对于外部相当于private。
代码下载地址:http://download.csdn.net/detail/zmdsjtu/9627692
第一段代码:操作符重载以及友元函数,都写得很浅显,各个功能块也有备注
#include<iostream>
class 时间 {
private:
int 小时;
int 分钟;
public:
时间();//构造函数
时间(int hours, int minutes);
时间 operator+(const 时间 & t)const;
void 展示();
friend 时间 operator*(double 倍数, const 时间&t);//友元随意放在哪儿,不受public和private影响
friend void operator<<(std::ostream&os, const 时间&t);//很常用的<<重载
};
时间::时间() { 小时 = 分钟 = 0; }
时间::时间(int hours, int minutes) { 小时 = hours; 分钟 = minutes; }
时间 时间::operator+(const 时间 &t)const {
时间 sum;
sum.分钟 = 分钟 + t.分钟;
sum.小时 = 小时 + t.小时 + sum.分钟 / 60;
sum.分钟 %= 60;
return sum;
}
void 时间::展示() {
std::cout << "总时间为:" << 小时 << "小时" << 分钟 << "分钟" << std::endl;
}
////友元函数//////
时间 operator*(double 倍数, const 时间&t){//定义的时候不要写friend
时间 result;
long totalminutes = 倍数*(t.分钟 + t.小时 * 60);
result.分钟 = totalminutes % 60;
result.小时 = totalminutes / 60;
return result;
}
void operator<<(std::ostream&os, const 时间&t) {
os <<"重载<<显示:"<< t.小时 << " 小时" << t.分钟 << " 分钟" << std::endl;
}
int main() {
时间 一(2, 13);
时间 二(3, 54);
/////////////////重载+////////////////////
时间 三 = 一 + 二;
std::cout << "此处为操作符+的重载:" << std::endl;
三.展示();
时间 四 = 3 * 三;
std::cout << "友元函数的应用3*class:" << std::endl;
四.展示();
std::cout << 四;
system("pause");
}
-------------------------------------------------------------------------
第二段代码:类的继承的用法以及protected:
#include<iostream>
using namespace std;
class 基类 {
public:
基类();
int 帅比;
int 测试值 = 0;
void show();
private:
int 分数=0;
protected://专门为亲儿子派生类准备的,里面相当于可以只有派生类可以访问的private
int 乖儿砸=0;
};
基类::基类() { 测试值 += 1; }
void 基类::show() { cout << "private内数值为:"<<分数<<endl; }
class 派生类:public 基类 {
public:
//void show2();
派生类();//派生类的构造函数,可以看到即便是派生类的构造函数还是要先调用一下基类的构造函数的
void show();//可以重写
};
派生类::派生类() { 测试值 += 1; }
//void 派生类::show2() { cout << "233"; }
void 派生类::show() { cout << "重新构建了show()函数但是基类的private不能访问了,测试值为"<<测试值<<endl; }
int main() {
派生类 一;
基类 二;
一.show();
二.show();
system("pause");
}
最后祝大家开学愉快~//要帮老板干活儿啦~~