自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

bbs375的博客

不积跬步无以至千里,不积小流无以成江海!

  • 博客(110)
  • 收藏
  • 关注

原创 for_each和transform用法比较

#include #include #include #include #include #include #include #include #includeusing namespace std;template void printV( T &v){

2016-09-30 16:50:17 555

原创 预定义函数对象和函数适配器案例

#include #include #include #include #include #include #include #include using namespace std; //函数对象class IsGreat{public: IsGreat(int n) {

2016-09-30 15:16:32 270

原创 STL容器算法迭代器的设计理念

1)STL的容器通过类模板技术,实现数据类型和容器模型的分离。2)STL的迭代器技术实现了遍历容器的统一方法;也为STL的算法提供了统一性3)STL的函数对象实现了自定义数据类型的算法运算。(算法和)4)具体例子:transform算法的输入,通过迭代器first和last指向的元算作为输入;通过result作为输出;通过函数对象来做自定义数据类型的运算。

2016-09-30 15:07:39 318

原创 预定义函数对象

#include #include #include #include #include #include #include #include using namespace std; //plus 预定义函数对象 能实现不能类型数据的+运算// 实现了算法和数据类型的分离 ===》通过函数对象技术实现的/*tem

2016-09-30 12:05:13 593

原创 二元函数对象和二元谓词

#include #include #include #include #include #include #include #include using namespace std; templateclass SumAdd{public: SumAdd() { } T operator()(cons

2016-09-30 11:04:20 565

原创 map容器的四种插入元素方法

//插入元素 //四种插入方法比较void display(){ map m; pair::iterator,bool> pair1 ,pair2,pair3; //1.方法 pair1 = m.insert(pair(1,"teacher01")); pair2 = m.insert(pair(2,"teacher02")); pair3 = m.insert(pair(2

2016-09-30 10:13:18 18161 2

原创 一元函数对象和一元谓词

谓词:一元函数对象:函数参数1个;二元函数对象:函数参数2个;一元谓词 函数参数1个,函数返回值是bool类型,可以作为一个判断式谓词可以使一个仿函数,也可以是一个回调函数。二元谓词 函数参数2个,函数返回值是bool类型 一元谓词函数举例如下:1,判断给出的string对象的长度是否小于6bool GT6(const string &s){return

2016-09-30 10:07:42 1142

原创 函数对象

1.函数对象:重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象。一个类对象,表现出一个函数的特征,就是通过“对象名+(参数列表)”的方式使用一个类对象,如果没有上下文,完全可以把它看作一个函数对待。这是通过重载类的operator()来实现的。“在标准库中,函数对象被广泛地使用以获得弹性”,标准库中的很多算法都可以使用函数对

2016-09-30 09:41:20 349

转载 迭代器基本原理

迭代器基本原理:迭代器是一个“可遍历STL容器内全部或部分元素”的对象。迭代器指出容器中的一个特定位置。迭代器就如同一个指针。迭代器提供对一个容器中的对象的访问方法,并且可以定义了容器中对象的范围。迭代器的类别:输入迭代器:也有叫法称之为“只读迭代器”,它从容器中读取元素,只能一次读入一个元素向前移动,只支持一遍算法,同一个输入迭代器不能两遍遍历一个序列。

2016-09-30 08:41:27 2093

转载 容器共性机制研究

理论提高:所有容器提供的都是值(value)语意,而非引用(reference)语意。容器执行插入元素的操作时,内部实施拷贝动作。所以STL容器内存储的元素必须能够被拷贝(必须提供拷贝构造函数)。 除了queue与stack外,每个容器都提供可返回迭代器的函数,运用返回的迭代器就可以访问元素。 通常STL不会丢出异常。要求使用者确保传入正确的参数。 每个容器都提供了一个默认

2016-09-30 08:22:15 262

转载 STL实用技术基本概念

STL基本概念STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。现然主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间。STL的从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),容器和算法通过迭代器可以进行无缝地连接。几乎所有的代码都采 用了模板类和模板

2016-09-30 08:11:32 692

原创 编程应用

试题描述:x小兰的大学教授要求小王实现一个算法,打印n对(n>=0)括号中的全部有效组合(即左右括号正确的配对)。要求输入一个整数n,输出若干行,每一行一个有效组合。请你帮小兰完成这个算法。输入整数N输出N行组合示例输入1230示例输出()()()(())((()))(()())(())()()

2016-09-29 19:59:37 358

原创 自定义异常类

#include using namespace std;class MyArray{public: MyArray(int size); ~MyArray();public: int & operator[](int index); int getLen(); /* 1) 抛出异常eNegative 2)index = 0 抛出异常 eZero 3)index

2016-09-28 09:43:47 308

原创 异常类型和异常变量的生命周期

#include using namespace std;//传统异常处理int copyfile(char *from, char * to){ if (from==NULL) { cout<<""<<endl; return 1; } if (to == NULL) { return 2; } if (*from == 'a') { return 3;

2016-09-28 08:56:27 686

原创 类模板在项目开发中的应用

模板是C++类型参数化的多态工具。C++提供函数模板和类模板。模板定义以模板说明开始。类属参数必须在模板定义中至少出现一次。同一个类属参数可以用于多个模板。类属参数可用于函数的参数类型、返回类型和声明函数中的变量。 模板由编译器根据实际数据类型实例化,生成可执行代码。实例化的函数。模板称为模板函数;实例化的类模板称为模板类。函数模板可以用多种方式重载。类模板可以在类层次

2016-09-27 18:20:15 387

原创 类模板中的static关键字

Ø 从类模板实例化的每个模板类有自己的类模板数据成员,该模板类的所有对象共享一个static数据成员Ø  和非模板类的static数据成员一样,模板类的static数据成员也应该在文件范围定义和初始化Ø  每个模板类有自己的类模板的static数据成员副本#include using namespace std;templateclass AA{public

2016-09-27 10:34:48 428

原创 滥用友元产生的第二个问题

所有的类模板函数写在类的外部,在不同的.h和.cpp中,也就是类模板函数说明和类模板实现分开//类模板函数构造函数普通成员函数友元函数用友元函数重载>; 用友元函数重载非>//要包含.cppcomplex.h#pragma once#include using namespace std;templateclass Complex{pub

2016-09-27 09:59:19 246

原创 滥用友元产生的第一个问题

#include using namespace std;templateclass Complex{public: Complex(T a ,T b); void printCom(); Complex operator+(const Complex &c);//成员函数实现+运算符重载protected:private: //声明位置无关 friend ostrea

2016-09-27 09:34:47 269

原创 模板类派生模板类

#include using namespace std;templateclass A{public: A(T a) { this->a = a; } void printA() { cout<<"a:"<<a<<endl; }protected:private: T a;};//模板派生是需要具体化模板类 c++编译器需要知道 父类的数据类型具体是什么

2016-09-27 08:21:39 1838

原创 模板类派生普通类

#include using namespace std;templateclass A{public: A(T a) { this->a = a; } void printA() { cout<<"a:"<<a<<endl; }protected:private: T a;};//模板派生是需要具体化模板类 c++编译器需要知道 父类的数据类型具体是什么

2016-09-27 08:14:30 868

原创 函数模板深入研究

/*1.编译器并不是把函数模板处理成能够处理任意类的函数2.编译器从函数模板通过具体类型产生不同的函数3.编译器会对函数模板进行两次编译4.在声明的地方对模板代码本身进行编译;在调用的地方对参数替换后的代码进行编译。*/#include using namespace std;templateT Max( T a,T b){ cout<<"T Max(T a ,T b)"<

2016-09-27 07:27:02 222

原创 函数模板和普通函数在一起调用规则研究

/*函数模板不允许自动类型转化普通函数能够进行自动类型转换*//* 1.函数模板可以像普通函数一样被重载 2.c++编译器优先考虑普通函数 3. 如果函数模板可以产生一个更好的匹配,那么选择函数模板 4.可以通过空模板实参列表的语法限定编译器智能选择模板匹配*/#include using namespace std;int Max(int a ,int

2016-09-26 20:59:44 1031

原创 c语言“多态”和c++中的多态

C++通过抽象类,也就是面向抽象类编程实现的(相当于C++编译器通过多态机制,已经很好用了。提前布局vptr指针、虚函数表;调用是迟绑定完成。)C++多态实现的三个条件:1.要有继承2.要有虚函数重写3.要有父类指针(引用)指向子类对象C语言中如何实现多态效果的呢?c语言中的函数指针 实现的回调函数 间接赋值是指针存在的最大意义。间接赋值成立的三个条件:

2016-09-26 15:53:31 375

原创 如何封装自己的动态库应用案例

一、生成dll文件1.创建一个dll应用程序生成dll2.添加mysocketclient.c文件3.生成mysocketclient.dll4.会在相应目录下生成mysocketclient.dll和mysocketclient.lib文件二、创建测试程序加载dll文件1.创建win32空项目并添加这两个文件2.

2016-09-26 11:09:27 3494

原创 回调函数

当函数指针(函数名)做为函数的参数,传递给一个被调用函数,被调用函数就可以通过这个指针调用外部的函数,这就形成了回调。回调函数:利用函数指针做函数参数,实现的一种调用机制,具体任务的实现者,可以不知道什么时候被调用。#define _CRT_SECURE_NO_WARNINGS#include #include#include //子任务的实现者int add(int a,in

2016-09-25 20:18:50 290

原创 函数指针语法梳理

//函数指针基本语法梳理//1.如何定义一个函数类型//2.如何定义一个函数指针类型//3.如何定义一个函数指针(指向一个函数的入口地址)int add(int a, int b){ int c = a+b ; return c;}int main(){ //直接调用函数 函数名就是函数入口地址 add(1,2); //间接调用 定义一个函数类型 {

2016-09-25 18:04:27 438

原创 数组类型基本语法梳理

#define _CRT_SECURE_NO_WARNINGS#include #include#include //数组类型基本语法梳理 //1.定义一个数组类型//2.定义一个数组指针类型//3.定义一个 数组指针变量int main(){ int a[10];//a代表数组首元素的地址 &a代表整个数组的地址 a+1 和&a+1步长 { //1.定义一

2016-09-25 17:52:12 271

原创 面向抽象类编程思想强化

企业信息系统框架集成第三方产品 案例背景:一般的企业信息系统都有成熟的框架。软件框架一般不发生变化,能自由的集成第三方厂商的产品。案例需求:请你在企业信息系统框架中集成第三方厂商的Socket通信产品和第三方厂商加密产品。                     1.第三方厂商的Socket通信产品:完成两点之间的通信;                     2.第三方厂商加密产

2016-09-25 16:53:14 644

转载 纯虚函数和抽象类

2016-09-25 09:01:21 190

原创 构造函数中调用虚函数能否实现多态

问:构造函数中调用虚函数能否实现多态?#include using namespace std;class Parent{public: Parent(int a = 0) { this->a = a; print(); } virtual void print() { cout<<"Parent1"<<endl; } virtual void print2

2016-09-25 08:26:19 1481

原创 C++多态原理探究

例子引出#include using namespace std;class Parent{public: Parent(int a = 0) { this->a = a; } virtual void print() { cout<<"Parent"<<endl; } protected:private: int a; };class Child

2016-09-25 07:31:53 268

原创 重载PK重写

函数重载:必须在同一个类中进行子类无法重载父类的函数,父类同名函数将被名称覆盖重载是在编译期间根据参数类型和个数决定函数调用函数重写:必须发生于父类与子类之间并且父类与子类中的函数必须有完全相同的原型使用virtual声明之后能够产生多态(如果不使用virtual,那叫重定义)多态是在运行期间根据具体对象的类型决定函数调用。#include using na

2016-09-24 21:26:00 266

原创 虚析构函数的作用

虚析构函数的作用:#include using namespace std;class A{public: A() { p = new char[20]; strcpy(p,"abcd1234"); cout<<"A"<<endl; } ~A() { delete[] p; cout<<"~A"<<endl; }protected:private

2016-09-24 20:25:22 1048

原创 继承与组合混搭情况下,构造和析构调用原则

原则:   先构造父类,再构造成员变量、最后构造自己  先析构自己,在析构成员变量、最后析构父类//先构造的对象,后释放案例:#include using namespace std;class Object{public: Object(int a,int b) { this->a = a; this->b = b; cout<<"Object"

2016-09-24 14:05:27 219

原创 继承中的对象模型

继承中的对象模型类在C++编译器的内部可以理解为结构体子类是由父类成员叠加子类新成员得到的#include using namespace std;class Parent{public: Parent(int a,int b) { this->a = a; this->b = b; cout<<"Parent"<<endl; } ~Parent(

2016-09-24 13:42:31 236

原创 智能指针

1问题抛出指针使用过程中,经常会出现内存泄漏和内存多次被释放常2 解决方案:例如:boost库的智能指针项目开发中,要求开发者使用预先编写的智能指针类对象代替C语言中的原生指针3 智能指针思想工程中的智能指针是一个类模板通过构造函数接管申请的内存通过析构函数确保堆内存被及时释放通过重载指针运算符* 和-> 来模拟指针的行为通过重载比较运算符 == 和!=

2016-09-24 09:47:23 200

原创 操作符重载专题强化训练-自定义字符串类

#pragma once#include using namespace std;class MyString{public: MyString(); MyString(int len); MyString(const char*p); MyString(const MyString& obj); ~MyString(void); void print(); int ge

2016-09-24 09:08:33 227

转载 为什么不要重载&&和||操作符

理论知识:1)&&和||是C++中非常特殊的操作符 2)&&和||内置实现了短路规则 3)操作符重载是靠函数重载来完成的 4)操作数作为函数参数传递 5)C++的函数参数都会被求值,无法实现短路规则 测试案例:#include #include using namespace std;class Test{ int i;public: Test(i

2016-09-24 07:10:15 857

原创 操作符重载强化训练2-自定义数组类

#include #include "Array1.h"Array1::Array1(int length){ if (length<0) { this->mlength = 0; } this->mlength = length; this->mspace = new int[this->mlength];}Array1::Array1(const Array1& o

2016-09-23 20:37:26 273

原创 重载=操作符解决浅拷贝问题

#include using namespace std;class Name{public: Name(const char *myp) { m_len = strlen(myp); m_p =(char *)malloc(m_len+1); strcpy(m_p,myp); } Name(const Name& obj) { m_len = obj.m_le

2016-09-23 18:30:55 308

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除