随笔分类 -  C++ primer

摘要:1.虚函数 1.1不含有任何数据成员或者虚函数的class或者struct大小为1,含有虚函数的对象在基地址部分有一个vptr,指向虚函数表,因此大小为4个字节。 1.2动态绑定的原理:假设派生类和基类存在覆盖的关系(基类中定义了虚函数),那么派生类在虚函数表中,会覆盖掉基类相应的虚函数。当程序... 阅读全文
posted @ 2014-08-02 00:10 Monica_Lee 阅读(757) 评论(0) 推荐(0)
摘要:1.function 和 函数指针 1.1 function有函数指针的功能,但是使用起来明显比函数指针更加灵活和方便。 1.2 函数指针和function的用法实例。 1.2.1 函数指针首先要清楚函数指针的类型,如void (*)(int, char)等,然后声明一函数指针变量直接调用... 阅读全文
posted @ 2014-08-01 19:21 Monica_Lee 阅读(338) 评论(0) 推荐(0)
摘要:1.exception.h#ifndef __EXCEPTION_H__#define __EXCEPTION_H__#include #include class Exception : public std::exception{ public: Exception(cons... 阅读全文
posted @ 2014-08-01 18:48 Monica_Lee 阅读(176) 评论(0) 推荐(0)
摘要:1.再说智能指针 1.1 为什么要用智能指针?对于一个指针,它指向一个动态分配内存的对象,若同时有多个指针指向该对象,那么当我们delete的时候,就会出现delete 一个无效内存的错误,因为该对象已经被delete过了,所以这就造成了错误。针对这一情况,我们想到,new 和 delete 必须... 阅读全文
posted @ 2014-07-22 23:07 Monica_Lee 阅读(471) 评论(0) 推荐(1)
摘要:1. 通过子类对象来调用函数: a)从父类继承而来的函数,可以正常使用; b)子类自行添加的函数,可以正常使用; c)子类编写和父类重名的函数,不管是否改变了参数,调用的都是子类的版本,如果需要调用父类的版本,需要显示指定父类名。 例1:#include #include using nam... 阅读全文
posted @ 2014-07-21 23:28 Monica_Lee 阅读(259) 评论(0) 推荐(0)
摘要:0.两个要点a) 一个空类,编译器自动合成默认无参构造函数、析构函数、拷贝构造函数、赋值运算符。b) 在编写类的时候,必须严格区分对象是否可复制。1.运算符重载之 string类1.1 运算符重载的几个要点:a) 运算符重载可以有成员函数和友元函数的形式,后者比前者多一个参数。b) =和+=必须重载... 阅读全文
posted @ 2014-07-19 15:24 Monica_Lee 阅读(521) 评论(0) 推荐(1)
摘要:1.Map1.1 map是一种pair的容器,pair的种类是pair。map采用下标访问一个已存在的key, 会更新value,访问map中不存在的元素时,会增加一个新的键值对。map中的元素按照key进行从小到大排列。map的底层实现是采用二叉树,一般是使用红黑树。#include #inclu... 阅读全文
posted @ 2014-07-18 08:47 Monica_Lee 阅读(177) 评论(0) 推荐(0)
摘要:1.默认拷贝构造函数1.1 编译器自动为我们合成一个拷贝构造函数。A(const A &).1.2 对象复制的时机:a) 显式复制。b) 使用对象做形参c) 使用对象做返回值d) 往容器中放入对象#include #include #include using namespace std;/* *用... 阅读全文
posted @ 2014-07-17 22:12 Monica_Lee 阅读(220) 评论(0) 推荐(0)
摘要:1.函数指针1.1 普通成员函数指针包含类名信息以及const属性,指向具体函数是必须加上&符号。#include using namespace std;class Test{ public: void setValue(const string &s, int a){ ... 阅读全文
posted @ 2014-07-16 10:17 Monica_Lee 阅读(390) 评论(0) 推荐(0)
摘要:1.程序框架分析:a)首先将mutex, condition, queue 封装成各自的类,方便对外提供接口函数,这里要注意 condition的封装,一个条件变量和一把锁是一起用的,因此在初始化 condition 对象的时候要用一个 mutex 对象去初始化,在pthread_cond_wait... 阅读全文
posted @ 2014-07-15 23:56 Monica_Lee 阅读(245) 评论(0) 推荐(0)
摘要:1.封装Mutex 1.1 封装前先总结一下常用的mutex操作有: pthread_mutex_init(&mutex, NULL ); //初始化一个互斥锁 pthread_mutex_destroy(&mutex); //销毁一个互斥锁 pthread_mutex_lock(&mutex); //上锁 pthread_mutex_unlock(&mutex);// 解锁 1.2 ... 阅读全文
posted @ 2014-07-15 23:53 Monica_Lee 阅读(421) 评论(0) 推荐(0)
摘要:1. 程序一,错误之处,当一个消费者在等待,此时一个生产者生产一个产品后把该消费者的等待线程激活,但是此时她还没有抢到锁,这个时候又来了一个消费者,并且互斥锁正好被它抢走,那么经过if判断此时队列不空,新来的消费者消费完释放锁离开,这时前面的被激活的那个消费者抢到了锁,当它在进行消费的时候就发生了错... 阅读全文
posted @ 2014-07-14 21:14 Monica_Lee 阅读(492) 评论(0) 推荐(0)
摘要:1.要求:将一篇文章录入,然后实现查询:a)查询可以输入字符或者字符串b)将包含它们的单词输出c)允许重复d)如果输入查询有空格,当多个处理Ex: 输入ro,应该打印出“microsift”输入”he wr”,则查询两次1.1 不用类实现#include #include #include #inc... 阅读全文
posted @ 2014-07-13 21:03 Monica_Lee 阅读(201) 评论(0) 推荐(0)
摘要:0.不要试着从C++编译器的角度理解问题,而是从程序的语义着手。1.控制台标准输入输出流的使用1.1IO对象不可复制或者赋值。因此使用IO对象做参数必须使用非const 引用参数(非const因为对IO对象的读写会改变其状态)。1.2当cin输入非法数据时,fail置为1,当cin遇到文件结尾(ct... 阅读全文
posted @ 2014-07-12 20:48 Monica_Lee 阅读(247) 评论(0) 推荐(0)