C++语言
文章平均质量分 64
patkritLee
practice makes perfect.
展开
-
LSD(line segment detect)基于opencv的代码
博主研究生阶段一直在研究LSD算法,先马出 LSD基于opencv的源代码。/*M/////////////////////////////////////////////////////////////////////////////////////////// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USI原创 2016-11-21 16:02:17 · 4934 阅读 · 0 评论 -
union的长度
联合体(union)当多个数据需要共享内存或者多个数据每次只取其一时,可以利用联合体(union);1)联合体是一个结构;2)它的所有成员相对于基地址的偏移量都为0;3)此结构空间要大到足够容纳最"宽"的成员;4)其对齐方式要适合其中所有的成员;下面举例说明:如联合体1 union U2 {3 char s[9];4 int n;5 double d原创 2016-08-03 15:25:23 · 1290 阅读 · 0 评论 -
如何检查内存泄露并进行定位
1. 定义:应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费2. 对于C和C++这种没有Garbage Collection 的语言来讲,我们主要关注两种类型的内存泄漏: 堆内存泄漏(Heap leak)。对内存指的是程序运行中根据需要分配通过malloc,realloc new等从堆中分配的一块内存,再是完成后必须通过调用对应的 free或者delete 删原创 2016-06-27 22:50:08 · 3632 阅读 · 0 评论 -
set中的greater()以及set的一些用法
当你在VS2013中想 引入greater,发现找不到,这个时候只要添加头文件#include 即可,less是不需要的// set练习.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include#include #include // std::greater#pragma warning(disable:4996)using原创 2016-03-14 18:24:08 · 1472 阅读 · 0 评论 -
C++:类模板
// 单个类模板基本语法.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#includeusing namespace std;//A编程模板 类//模板类 类型参数化template class A{public: A(T a = 0){ this->a = a; }public: void print(){ cout原创 2016-02-29 16:50:49 · 387 阅读 · 0 评论 -
C++学习笔记:函数模板
// 函数模板基本语法.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include using namespace std;template void mySwap(T &a,T &b){ T t = b; b = a; a = t; cout << "hello...我是模板函数,欢迎调用我" << endl;}int _原创 2016-02-29 15:56:18 · 312 阅读 · 0 评论 -
C++学习笔记:函数指针语法基础以及函数指针做函数参数的思想剖析
// 函数指针语法基础02.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#includeusing namespace std;int add(int a,int b){ cout << "add() do...:"<< a + b << endl; return a + b;}int _tmain(int argc, _TCHAR*原创 2016-02-28 21:09:13 · 431 阅读 · 0 评论 -
C++学习笔记:c++模型设计和实现 经典案例
信息系统框架集成第三方产品案例——加解密案例背景:一般的企业信息系统都有成熟的框架。软件架构一般不发生变化,能自由的集成第三方厂商的产品。案例要求:请你在企业信息系统框架中集成第三方厂商的Socket通信产品和第三方厂商加密产品。第三方厂商的socket通信产品:完成两点之间的通信;第三方厂商加密产品:完成数据发送时加密;数据解密时解密。案例要求:1)能支持多个厂商的Socke原创 2016-02-27 22:17:45 · 1258 阅读 · 0 评论 -
C++学习笔记:纯虚函数和抽象类
纯虚函数:纯虚函数时一个在基类中说明的虚函数,在基类中没有定义,要求任何派生类都定义自己的版本。纯虚函数为各派生类提供一个公共界面(接口的封装和设计、软件的模块功能划分)纯虚函数说明形式:virtual 类型 函数名(参数表)=0;一个具有纯虚函数的基类成为抽象类。原创 2016-02-27 19:31:10 · 373 阅读 · 0 评论 -
多态相关的面试题
1.如何理解多态。多态的实现效果:同样的调用语句有多种的表现形态;多态实现的三个条件:有继承、有virtual重写、有父类指针(引用)指向子类对象;多态的C++实现:virtual关键字,告诉编译器这个函数要支持多态;不是根据指针类型判断如何调用;而是根据指针所指向的实际对象类型来判断如何调用多态的理论基础:动态联编PK静态联编,根据实际的对象类型来判断重写函数的调用。多态原创 2016-02-25 13:09:05 · 927 阅读 · 0 评论 -
C++学习笔记:虚析构函数
我们直接上案例:// 虚析构函数.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#includeusing namespace std;#pragma warning(disable:4996)class A{public: A(){ p = new char[20]; strcpy(p,"obja"); printf("A()原创 2016-02-24 17:41:56 · 391 阅读 · 0 评论 -
memcpy、strcpy 和memmove
strcpy和memcpy都是标准c库函数,它们的特点:strcpy提供了字符串的复制,strcpy只用于字符串的复制,不仅复制字符串内容外,还会复制字符串的结束符。strcpy的函数原型是: char* strcpy(char* dest, const char* src);char *strcpy(char *dest,const char *src){ if((src==NUL原创 2016-08-03 17:00:58 · 582 阅读 · 0 评论 -
string类中的size()和length()的区别
如题:功能上没有区别。basic_string一个是代替传统的C字符串,所以应该针对C中的strlen,给出相应的函数length。另外一个身份可用作STL容器,所以要按照STL容器的惯例给出size()。原创 2016-08-03 17:41:16 · 1019 阅读 · 0 评论 -
C++析构顺序
设已经有A,B,C,D4个类的定义,程序中A,B,C,D析构函数调用顺序为?12345678C c;voidmain(){ A*pa=newA(); B b; staticD d; del原创 2016-09-02 15:11:52 · 981 阅读 · 0 评论 -
C++面试题:介绍一下STL如何实现vector
考点:vector的理解与实现细节解析:vector的定义如下: template > class vector { …… };这里省略了中间的成员。其中_Ty类型用于表示vector中存储的元素类型,_A默认为allocator类型。这里需要说明的是allocator类,它是一种内存配置器,负责提供内存管理(可能包含内存分配、释放、自动回收等能力)相关原创 2016-08-24 17:54:37 · 674 阅读 · 0 评论 -
C++,多线程:原子操作解决线程冲突
言 在多线程中操作全局变量一般都会引起线程冲突,为了解决线程冲突,引入原子操作。正文1.线程冲突#include #include #include #include int g_count = 0; void count(void *p) { Sleep(100); //do some work //转载 2016-10-24 22:40:49 · 1698 阅读 · 0 评论 -
C语言多线程的引入
前言 多线程是编程中的一个重要内容。多核时代使多线程成为一种可能,显然,一件事情多个人干,效率一定会提升。下面来看下C语言中是如何使用多线程的。正文1.CreateThread先来看一个实例// cpp_mutex.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include #inc转载 2016-10-24 22:37:47 · 684 阅读 · 0 评论 -
strtod()函数
strtod()含义:将字符串转换成浮点数头文件:#include定义函数:double strtod(const char *nptr, char **endptr);函数说明:strtod()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或者正负符号才开始做转换,到出现非数字或字符串结束时('\0')才结束转换,并将结果返回。若endptr不为NULL,则会原创 2016-09-21 10:28:31 · 1176 阅读 · 0 评论 -
C++学习笔记:类型转换dynamic_cast和reinterpret_cast
dynamic_cast 命名上理解是动态类型转换,如子类和父类之间的多态类型转换// dynamic_cast_test.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include using namespace std;class Animal{public: virtual void cry() = 0;privat原创 2016-03-04 20:00:08 · 352 阅读 · 0 评论 -
static关键字的特点
主要从两个方面做回答,存储域和作用域1.第一条也是最重要的一条:隐藏.(static函数和static变量均可)当同事编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。举个例子:同时编译两个源文件,一个是a.c,另一个是main.c。// a.cchar a = 'A';void msg(){ printf("hello\n");}// main原创 2016-08-03 18:21:46 · 739 阅读 · 0 评论 -
动态分配内存函数:malloc(),calloc(),realloc()总结
C 标准函数库提供了许多函数来实现对堆上内存管理,其中包括:malloc函数,free函数,calloc函数和realloc函数。使用这些函数需要包含头文件stdlib.h。它们的声明如下:void * malloc(int n);void free (void * p);void *calloc(int n,int size);void * realloc(void * p,in转载 2016-08-24 17:26:47 · 1315 阅读 · 0 评论 -
STL remove和erase
remove算法描述:查找得到第一个元素的位置,然后从此位置开始遍历容器,将后面的元素依次前移,跳过和value相同值的元素,也就是说,所有和value相同值的元素都会被覆盖,而其他的元素都会依次前移。最后remove返回“指向最后一个'有用'元素的iterator”,但是在remove算法过程中,并没有修改元容器的size,以及end()。但是从逻辑角度看,最后的[从remove得到的ite原创 2016-08-24 16:45:13 · 485 阅读 · 0 评论 -
内存泄露和野指针的概念
内存泄漏 用动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元,不能被任何程序再次使用,直到程序结束。即所谓内存泄漏。 注意:内存泄漏是指堆内存的泄漏。 简单的说就是申请了一块内存空间,使用完毕后没有释放掉。它的一般表现方式是程序运行时间越长,占用内存越多,最终用尽全部内存,整个系统崩溃。由程序申请的一块内存,且没有任何一个指针指向它,那么这转载 2016-09-15 11:05:43 · 387 阅读 · 0 评论 -
stl reserve和resize区别
首先我们看下size和capacity的区别size是当前vector容器真实占用的大小,也就是容器当前拥有多少个元素。capacity是指在发送realloc前 允许的最大元素数,即预分配的内存空间。注:在STL中,拥有capacity属性的容器只有vector和string这两个属性分别对应两个方法:resize()和reserve()a.reserve是容器预留空间,原创 2016-08-24 16:13:37 · 654 阅读 · 0 评论 -
C++拷贝构造函数的使用时机 笔试题
#includeusing namespace std;classMyClass{public: MyClass(inti = 0) { cout } MyClass(constMyClass &x) { cou原创 2016-09-02 15:25:05 · 590 阅读 · 0 评论 -
c++构造函数中调用虚函数的原理剖析
问题1:C++中构造函数中调用虚函数,能实现多态吗?答:不能。这里主要涉及到vptr的分步初始化问题。我们先回忆一下多态的实现原理a.当类中定义了虚函数方法时,该类就会生成一张虚函数表,其中记录虚函数的入口地址。b.存在虚函数时,每个对象中都有一个指向虚函数表的指针(vptr指针)。然后关于vptr指针,会有一个分步初始化的问题。比如创建子类对象 child c1原创 2016-08-24 11:54:24 · 629 阅读 · 0 评论 -
C++学习笔记:多态的实现原理
C++中多态的实现原理: 当类中声明虚函数时,编译器会在类中生成一个虚函数表虚函数表是一个存储类成员函数指针的数据结构虚函数表是由编译器自动生成和维护的virtual成员函数会被编译器放入虚函数表中存在虚函数时,每个对象中都有一个指向虚函数表的vptr指针// 多态原理探究.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"原创 2016-02-25 10:56:10 · 500 阅读 · 0 评论 -
C++学习笔记:重写PK重载
函数重载:必须在同一个类中进行子类无法重载父类的函数,父类同名函数将被名称覆盖重载是在编译期间根据参数类型和个数决定函数调用函数重写:必须发生于父类与子类之间并且父类与子类中的函数必须有完全相同的原型使用virtual声明之后能够产生多态(如果不使用virtual,那叫重定义)多态是在运行期间根据具体对象的类型决定函数调用重写分为2类:1.原创 2016-02-24 20:27:42 · 347 阅读 · 0 评论 -
C++学习笔记:多态
引言:1.虚继承:如果一个派生类从多个基类派生,而这些基类又有一个共同的基类,则在对该基类中声明的名字进行访问时,可能产生二义性。解决方案:虚继承声明,加一个virtual 关键字 。2.面向对象新需求编译器的做法不是我们期望的 如果用父类指针指向子类对象,再调用print()方法,均会调用父类中的print()方法。而我们期望这样做:根据实际的对象类型来判断重名原创 2016-02-24 15:01:23 · 293 阅读 · 0 评论 -
C++学习笔记:友元函数和友元类
友元函数,故名思议,是类的好朋友。友元函数破坏了类的封装性。友元函数通过对象参数可以访问私有数据成员。我们整一个案例:// 友元函数.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include using namespace std;class Test{private: int a;public: Test(int _a){原创 2016-02-22 08:45:20 · 466 阅读 · 0 评论 -
C++学习基础篇一:c++对c的扩展
问题抛出:1. C++编译时如何区分是c1对象,c2对象还是c3对象调用了类的方法2. class类是一个数据类型和对象 1:n关系3. 学习c++的方法是和面向过程不一样的 c++对c的扩展:面向对象概念(cout cin类、对象 面向对象和面向过程求解问题)易犯错误模型(引入成员函数的必要性)C语言和C++语言的关系namespace定义(可嵌套原创 2016-02-17 18:41:48 · 669 阅读 · 0 评论 -
C++中引用之常引用
引用&分为普通引用和常引用。知识架构:void main(){ //普通引用 int a = 10; int &b = a; printf("b:%d \n", b); //常引用 int x = 20; const int &y = x; //常引用 是 让变量 引用只读属性 不能通过y去修改x了 //y = 21; //常引用 初始化 分为2种情况 /原创 2016-02-17 22:54:23 · 3232 阅读 · 0 评论 -
new和delete、malloc和free之间的异同点以及用法实例
// new和delete.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include using namespace std;class Test{public: Test(int _a){ a = _a; cout << "构造函数被执行" << endl; } ~Test(){ cout << "析构函数被执行" <原创 2016-02-20 22:22:03 · 807 阅读 · 0 评论 -
C++学习之 构造函数中调用构造函数
// 构造中调用构造函数练习.cpp : 定义控制台应用程序的入口点。#include using namespace std;class ABC{public: ABC(int a, int b, int c){ this->a = a; this->b = b; this->c = c; printf("构造函数调用:a%d,b%d,c%d", a, b, c)原创 2016-02-20 20:46:57 · 960 阅读 · 0 评论 -
C++学习笔记之 构造函数的初始化列表
// 20160220 note/* 知识点:构造函数的初始化列表 先执行 被组合对象的构造函数,也就是该例子中的A类的对象 如果组合对象有多个,则按照定义的顺序,而不是按照初始化列表的顺序来执行 析构函数的顺序和构造函数调用顺序相反*/#include using namespace std;class A{public: A(int _a){ a = _a;原创 2016-02-20 19:38:32 · 316 阅读 · 0 评论 -
C++之 浅拷贝和深拷贝
// 深拷贝与浅拷贝.cpp : 定义控制台应用程序的入口点。//浅拷贝只会简单的进行 值拷贝 本demo展示了浅拷贝会引发的漏洞#include "stdafx.h"#include #include #pragma warning(disable:4996)using namespace std;class Name{public: Name(const char*原创 2016-02-19 22:54:43 · 417 阅读 · 0 评论 -
C++之 构造函数调用规则
1)当类中没有定义任何一个构造函数时,C++编译器会提供默认无参构造函数和默认拷贝构造函数。2)当类中定义了拷贝构造函数时,C++编译器不会提供无参构造函数。3)当类中定义了任意的非拷贝构造函数,即类中提供了有参构造函数,C++编译器不会提供无参构造函数。4)默认拷贝构造函数成员变量只进行简单赋值总结:只要你写了构造函数,那么你就必须要用!!!原创 2016-02-19 21:29:35 · 742 阅读 · 1 评论 -
C++之匿名对象与析构函数的关系
#include using namespace std;class Location{public: Location(int xx = 0, int yy = 0){ X = xx; Y = yy; cout << "Constructor Object.\n"; } Location(const Location& obj){//copy构造函数 X = obj.X;原创 2016-02-19 20:22:53 · 832 阅读 · 0 评论 -
C++基础篇之 复制构造函数调用时机
// 拷贝构造函数调用时机.cpp : 定义控制台应用程序的入口点。#include using namespace std;class AA{public: AA(){//无参构造函数,默认构造函数 cout << "我是构造函数,自动被调用" << endl; } AA(int _a){//有参构造函数 a = _a; } AA(const AA& obj){原创 2016-02-19 21:00:11 · 611 阅读 · 0 评论 -
C++学习笔记:异常的基本语法
1)若有异常 则通过throw 操作 创建一个异常对象 并抛出。2)将可能抛出异常的程序段嵌在try块之中。控制通过正常的顺序执行到达try语句。然后执行try块内的保护段3)如果在保护段执行期间没有引起异常,那么跟在try块后的catch子句就不执行。程序从try块后跟随的最后一个catch子句后面的语句继续执行下去4)catch子句按其在try块后出现的顺序被检查。匹配的catch原创 2016-03-05 10:32:08 · 481 阅读 · 0 评论