
C++与C 学生时代笔记
这是学生时代 写的有点简陋了
JackGsf
希望你 在任何时候都能做出最正确的选择
展开
-
中介模式
我的理解是将让两个对象不直接交互,而是通过一个中介类把这两个对像都封装在里面,这两个对象要想传递信息就必须通过这个中介类来实现。下面是一个 房东 租客 中介公司的例子 uml类图如下 这个图显示了本代码所有的逻辑关系:#include <iostream>#include <cstring>using namespace std;class Person; //注意类的使用class原创 2015-09-17 21:56:29 · 331 阅读 · 0 评论 -
工厂模式
涉及知识:纯虚函数,虚函数, 虚析构函数, 抽象基类图解如下:UML图:应用实例:女娲造人#include <iostream>using namespace std;class Human{ public: virtual void speak() const = 0; virtual ~Human(){}};class WhiteHuman : pu原创 2015-09-16 20:14:53 · 276 阅读 · 0 评论 -
文件流: ASCII 与 二进制
Ofstream: 输出文件流ASCII 文本文件一个字符一个字符的写put(char ch);#include #include #include using namespace std;int main(){ int a[10]; int i; //指定工作方式ios::out注意这是在定义类对象,文件流ofstream /原创 2015-09-21 22:08:04 · 827 阅读 · 0 评论 -
I/O :文件流
首先搞清流的输入输入出图解: ifstream: 搞出的是输入文件流对象ofstream: 搞出的是输出文件流对象fstream 输入输出文件流#include <iostream>#include <fstream>#include <cstdlib>#include <cstring>using namespace std;struct Student{ char name[原创 2015-09-21 21:52:40 · 371 阅读 · 0 评论 -
C++ 与C
1.函数指针上,如下C++为了区分重载函数的入口地址,编译时进行了代码优化.int fun(){ cout<<.....}int fun(int, int){ ......}int main(){ int (*f)() = fun; //fun_void int (*p)(int, int原创 2015-08-24 09:38:59 · 231 阅读 · 0 评论 -
c与c++的区别
在C中a++或++a 及表达式不能做作左值,而在C++中++a可做左值#include <iostream>using namespace std;int main(){ int a = 2; ++a = 12; //这里可以++a返回的是a //a++ = 9;error 9不能赋值为一个无法标识的内存 cout << "a: " << a << e原创 2015-08-28 20:11:01 · 239 阅读 · 0 评论 -
函数 指针与引用
传值调用: 传递变量 传址调用: 传递变的的地址 Note: 指针变量也是变量用指针作参数不一定是传址调用多级指针 引用多用于函数形参以能不开辟空间而改变原始变量而被广泛使用,:用形参,并不加第三变量交换两个数原创 2015-08-28 20:46:47 · 364 阅读 · 0 评论 -
数组与指针
有以下几个小麻烦搞清楚:1. int a[5]; a与&a的值一样但含义不同a为数组元素的首地址 a标识一个int一次偏移4个字节, &a标识4个int一次偏移16个字2.int temp[3][4]int (*p)[4] = temp;int (*p)[3][4] = &temp;temp[0] + 0 = *(p+0) + 0;temp[0][0] = *(*(p原创 2015-08-28 20:59:33 · 228 阅读 · 0 评论 -
常指针 和 常引用
笔记const1.常引用对常引用来说他一般是对由系统临时分配而无法改变的中间变量起别名如以下程序中的两种情况,而引用则是给一般的变量起别名。原创 2015-08-28 21:14:20 · 823 阅读 · 0 评论 -
函数重载
重载函数特点 函数名相同形参列表不同(调用最接近的) note: 与返回类型无关如何把两个重载函数的入口地址输出来? <函数指针> eg:#include <iostream>#include <cstdio>using namespace std;int add(int a, int b){}int add(int a, double b){}int main(){原创 2015-08-29 12:36:40 · 249 阅读 · 0 评论 -
内联函数
内联函数:用inline 修饰的函数 作用:当满足下列条件时,推荐使用 1.代码较少 2.功能简单无循环 3. 内部频繁使用note: 内联函数无声明…待证总结:用inline 代替#define SA(x) x*x, 用const 代替#define Pi 3.12 。更安全, 因为编译器要比预处理器更负责。原创 2015-08-29 13:04:51 · 246 阅读 · 0 评论 -
递归函数
递归函数,按定义说是函数自己调用自己,可要理解却很费劲,如下是从函数开辟栈空间的函数帧的角度,来阐释其原理。#include <iostream>using namespace std;void fun(int n){ cout << "start fun,n: " << n << endl; if(n == 0) return; int temp =原创 2015-08-29 19:50:39 · 286 阅读 · 0 评论 -
函数的可变参数
函数的可变参数列表va_list;偏移指针。 va_start();初始化指针。 va_arg(va_list,type);取值 va_end();将指针悬空缺省参数的函数int f(int,int=8);原创 2015-08-31 19:49:22 · 277 阅读 · 0 评论 -
结构体内存分配:举例待续
定义结构体类型,系统不为之分配内存单元。 当使用结构体类型定义变量时,才开辟内存单元。结构体在内存中所占的大小决定于两点: 1.编译器默认或指定对齐数;(eg:64为ubuntu14.04 默认8) 这个可通过 ‘#pragma pack(n)’来指定 2.(每个成员)实际有效对齐数,指的是所有成员中所占字节最大的那一个最后边界对齐的大小取决于上面两个值中的较小的那一个#i原创 2015-08-31 20:10:09 · 308 阅读 · 0 评论 -
!!!union
联合判别式 联合只能用第一个成员类型的值进行初始化。且初始化必须放在一个大括号里面.联合体是所有的成员都共用一块内存,如下在使用联合对象时,我们往往得确定union对象当前存储的是什么类型的值,所以,更常见的用法是使用 union的判别式(discriminant).原创 2015-09-01 19:57:50 · 333 阅读 · 0 评论 -
函数指针
函数指针数组(转移表)形式如下:int (*f[4])(); 应用转移表:如下为一个利用这个,实现加、减、陈、除。函数指针(回调)形式如下: int (*f)();//无参的函数指针f应用: 利用一个函数查找,一维数组中的最大值和最小值原创 2015-09-07 20:16:59 · 271 阅读 · 0 评论 -
高级指针: 数组
cout在处理char * 类型的数据(地址:指向字符或字符串), 时会直接根据地址找到字符或字符串char temp[2][3] = {"hello", "world"};#include <iostream>using namespace std;int main(){ char *array[2] = {"hello","world"}; char temp[2][10] =原创 2015-09-07 20:53:52 · 257 阅读 · 0 评论 -
析构函数
析构函数:定义形式固定 如下~ClassName(){ ...//释放由于构造函数开辟的 堆内存} 时间:在对象被系统销毁之前,由系统自动调用。 目的:清理由构造函数开辟出的无法释放的内存,如new出来的堆内存 当有多个对象被构造时,遵循‘先构造.后销毁’的原则,如下: 前提:同一种存储位置下#include <iostream>using namespace原创 2015-09-08 15:42:43 · 353 阅读 · 0 评论 -
类在内存中的分配
类和结构体一样,其内存分配遵循一样的法则,但不同的是,类中的方法不分配内存,如下class Name{ private: int n; int m; puclic: inline void get();}class Name n1, n2; n1,和n2具有不同的this->n ,this->m ,但他们却共用同一个方法: v原创 2015-09-08 15:48:36 · 341 阅读 · 0 评论 -
构造函数
构造函数按形式分可分为三类: 默认(无参)的构造函数自定义的构造函数具有初始化列表的构造函数 通常初始化列表的构造函数是一般为了对 const 成员初始化 //! 初始化成员的次序,与定义成员的次序一致Class Time{ Public: Time(int n): hour(n), src(3){ //初始化参数列表 ....原创 2015-09-09 19:10:03 · 277 阅读 · 0 评论 -
const 与 static
const1. 修饰数据成员int const i = 10;当const修饰数据时,其意义与C语言中相似,但在c++中对const含义进行了拓展, 编译器在编译阶段将‘i’的值10提前写入符号表,而不对它进行分配内存2.修饰成员函数形式: type classname::fun() const; 目的:使函数只能引用数据成员而不能它的值(如果 “mutable int a;”则a便能够被改变)原创 2015-09-09 20:34:23 · 268 阅读 · 0 评论 -
复制控制(管理指针成员)
智能指针目的:解决多个对象‘共享内存’问题。 带有动态分配内存的对象,在用析构函数释放内存的时候,可能出现多次释放的问题:内存泄漏/double free方法:跟踪对象:即用一个计数器,记录拷贝的对象个数,通过不断减少计数器里的值达到只释放一次内存的目的#include <iostream>#include <cstring>using namespace std;class Banji原创 2015-09-10 21:38:59 · 299 阅读 · 0 评论 -
重载操作符
重载流操作符c++ 允许对操作符进行重载 1. ?: 2. 待续 对流的重载最好不要声明成类的成员函数。详细内容见C++Primer 第14章举例:对一个类重载‘输入输出流’class Time{ public: Time(int h = 0, int m = 0, int s = 0):hour(h), min(m), sec(s){} Time &原创 2015-09-11 20:21:31 · 321 阅读 · 0 评论 -
类型转换函数 & 转换构造函数
类型转换函数用途:将一个对象转换为int , double , float . 如: double b = 2.1; Complex(一个类名) c1; b = c1;原创 2015-09-12 15:42:27 · 797 阅读 · 0 评论 -
struct && class
struct 和 class 的不同其中成员的 ‘默认访问属性’不同。 struct: 公有class: 私有作为派生类时对基类的 ‘默认访问方式’不同 struct Student : Person //默认公有继承class Student : Person //默认私有继承原创 2015-09-14 21:19:28 · 281 阅读 · 0 评论 -
using 与 派生
using可以用在派生类中用于恢复由 ‘继承方式’ 改变的成员访问属性如下class Person{ protected: int age; public: Person(){} void disp(){}};class Student : public Person{ using Person::age; //这样原创 2015-09-14 21:21:23 · 287 阅读 · 0 评论 -
虚函数
虚函数定义: 基类中指向派生类的函数,简单的说就是virtual 修饰的函数作用: 当基类的指针指向派生类的对象时能调用派生类新增的成员实现机制: 基类中多了一个虚函数表 指针数组 同一类族中不同类的对象,对同一函数调用做出不同的响应:这就是由虚函数实现的动态多态性函数重载处理的是同一层次上的同名函数问题,属横向重载 静态关联 虚函数处理的是派生层次上的同名函数问题, 属纵向重载 动态原创 2015-09-16 14:36:25 · 293 阅读 · 0 评论 -
异常处理
重点了解,捕获异常时对异常信息的详细处理#include <iostream>#include <cstdlib>#include <cmath>using namespace std;double triangle(double a, double b, double c){ double s = (a+b+c)/2; if(a+b<=c || a+c<=b || b+c<=原创 2015-09-17 20:04:49 · 238 阅读 · 0 评论 -
模板(泛型)
函数模板 函数模板并非函数,而是一个模子,在编译阶段根据他生成一个确定的模版函数这才是真正能用的函数。形式: template int fun(virtual_name a, double size) {}特化的前提是有普通模板#include <iostream>using namespace std;//函数模板的定义形式template<typename T>T s原创 2015-09-22 20:23:58 · 379 阅读 · 0 评论 -
c++友元
友元函数 一个类如果将对其非公有成员的访问权限授予一个函数,则此函数被称为友元函数友元类 一个类如果将对其非公有成员的访问权限授予一个类,则这个类被称为友元类注意一点的是要想访问类里面的私有数据成员就必须有类的对象原创 2015-09-28 19:54:51 · 302 阅读 · 0 评论