C++开发
文章平均质量分 78
Vincent乐
计算机视觉、机器学习、深度学习
展开
-
struct和typedef struct
分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student { int a; }Stu; 于是在声明变量的时候就可:Stu stu1;(如果没有typedef就必须用struct Student stu1;来声明) 这里的Stu实转载 2013-03-21 21:53:23 · 1805 阅读 · 0 评论 -
strcpy函数的实现
char *my_strcpy(char *dst,const char *src){ assert(dst != NULL); assert(src != NULL); char *ret = dst; while((* dst++ = * src++) != '\0') ; return ret;}如果注意到:1,检查指针有效性;2,返回目的指针des;3,原创 2014-04-04 11:21:07 · 810 阅读 · 0 评论 -
一般函数指针和类的成员函数指针
函数指针是通过指向函数的指针间接调用函数。函数指针可以实现对参数类型、参数顺序、返回值都相同的函数进行封装,是多态的一种实现方式。由于类的非静态成员函数中有一个隐形的this指针,因此,类的成员函数的指针和一般函数的指针的表现形式不一样。1、指向一般函数的指针函数指针的声明中就包括了函数的参数类型、顺序和返回值,只能把相匹配的函数地址赋值给函数指针。为了封装同类型的函数,可以把函数原创 2014-04-03 13:43:30 · 744 阅读 · 0 评论 -
栈内存指针
这几天在学习C过程中,在使用指针作为函数参数传递的时候出现了问题,根本不知道从何得解:源代码如下: createNode(BinNode *tree,char *p) { tree = (BinNode *) malloc(sizeof(BinNode)); tree->data = *p; }该代码段的意图是通过一个函数创建一转载 2014-04-10 17:31:41 · 1108 阅读 · 0 评论 -
svn使用教程-windows和Linux下常用操作总结
1.Windows系统下svn使用1)安装客户端:http://tortoisesvn.net/downloads2)建立工作目录: 新建一个文件夹(工作目录),右击选择checkout,填写URL和用户名密码 也可在我的电脑或桌面空白处直接右键-checkout,填写URL和用户名密码,输入本地文件夹名称即可。3)更新本地工作目录文件: 工作目录右键u转载 2014-04-14 13:19:31 · 1379 阅读 · 0 评论 -
C++ 多态性与虚函数
面向对象程序设计中的多态性是指向不同的对象发送同一个消息,不同对象对应同一消息产生不同行为。在程序中消息就是调用函数,不同的行为就是指不同的实现方法,即执行不同的函数体。也可以这样说就是实现了“一个接口,多种方法”。 从实现的角度来讲,多态可以分为两类:编译时的多态性和运行时的多态性。前者是通过静态联编来实现的,比如C++中通过函数的重载和运算符的重载。后者则是通过动态联编来实现的,原创 2014-03-28 20:40:57 · 786 阅读 · 0 评论 -
C++ 内存对齐
a. 基本类型:所有的基本类型都有相应的对齐参数,编译器在编译时,会用全局的对齐参数和当前类型的对齐参数中较小的一个进行对齐。比如,编译时指定暗8bytes对齐(用#pragma pack(8)实现之),可是由于一个char变量的大小为一个byte,所以最后还是按1byte对齐。b. 复合类型:复合类型的对齐原则,就是取其成员变量数据类型的字节数的最大者和在编译时指定的对齐数两者之间较小的字节原创 2014-03-31 21:57:04 · 834 阅读 · 0 评论 -
C++ 虚基类
虚基类是用关键字virtual声明继承的父类,即便该基类在多条链路上被一个子类继承,但是该子类中只包含一个该虚基类的备份,虚基类主要用来解决继承中的二义性问题,这就是是虚基类的作用所在。 正是由于虚基类的这个作用,所以在每个子类的构造函数中必须显示的调用该虚基类的构造函数,不管该虚基类是不是直接的父类。 其次,虚基类的构造函数的调用早于其他非虚基类的构造函数原创 2014-03-31 12:20:08 · 11275 阅读 · 3 评论 -
B树、B+树、AVL树、红黑树
binary search tree,中文翻译为二叉搜索树、二叉查找树或者二叉排序树。简称为BSTB树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树;转载 2013-01-06 17:25:14 · 22921 阅读 · 5 评论 -
红黑树 删除
红黑树是一种特殊的二叉查找树,其删除结点首先要按二叉查找树删除结点的算法进行一、普通二叉查找树删除一个结点:(1)待删除结点没有子结点,即它是一个叶子结点,此时直接删除(2)待删除结点只有一个子结点,则可以直接删除;如果待删除结点是根结点,则它的子结点变为根结点;如果待删除结点不是根结点,则用它的子结点替代它的位置。(3)待删除结点有两个子结点,首先找出该结点的后继原创 2014-07-30 10:46:11 · 835 阅读 · 0 评论 -
C++ 智能指针
当类中有指针成员时,一般有两种方式来管理指针成员:一是采用值型的方式管理,每个类对象都保留一份指针指向的对象的拷贝();另一种更优雅的方式是使用智能指针,从而实现指针指向的对象的共享。 智能指针(smart pointer)的一种通用实现技术是使用引用计数(reference count)。智能指针类将一个计数器与类指向的对象相关联,引用计数跟踪该类有多少个对象共享同一指针。原创 2014-08-06 17:23:50 · 726 阅读 · 0 评论 -
C/C++ const关键字
1. const 在C和C++中的区别(1)在C中,const变量是一个“不能被改变的普通变量”,既然是变量,就要占用存储空间,所以编译器不知道编译时的值,所以在C中可以这么写:const int size; //被看做一个声明,它会在别的地方分配存储空间但不能这么写:const int size=100;char buf[size]; //因为size不是原创 2014-04-03 11:01:50 · 958 阅读 · 0 评论 -
Effective C++ 总结 (中)
四.设计与声明 条款18:让接口容易被正确使用,不易被误用 理想上,如果客户企图使用某个接口而却没有获得他所预期的行为,这个代码不该通过编译;如果代码通过了编译,它的作为就该是客户所想要的。 欲开发一个“容易被正确使用,不容易被误用”的接口,首先必须考虑客户可能做出什么样的错误。 许多客户端错误可以因为导入新类型而获得预防。在原创 2014-08-07 21:50:59 · 849 阅读 · 0 评论 -
Effective C++ 总结 (上)
条款01:视C++为一个语言联邦 为了更好的理解C++,我们将C++分解为四个主要次语言:C。说到底C++仍是以C为基础。区块,语句,预处理器,内置数据类型,数组,指针统统来自C。Object-Oreinted C++。这一部分是面向对象设计之古典守则在C++上的最直接实施。类,封装,继承,多态,virtual函数等等...Template C++。这是C++泛型编程部分。S原创 2014-08-06 21:27:00 · 1699 阅读 · 0 评论 -
Effective C++ 总结 (下)
,如果你定义了一个变量且该类型带一个构造函数或析构函数,当程序到达该变量时,你要承受构造成本,而离开作用域时,你要承受析构成本。为了减少这个成本,最好尽可能延后变量定义式的出现时间。举例说明:原创 2014-08-07 22:32:34 · 1411 阅读 · 0 评论 -
C++ extern和static关键字
1 基本解释:extern可以置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 也就是说extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数原创 2014-04-01 13:39:45 · 1172 阅读 · 0 评论 -
C++ 强制类型转换
在C++语言里为了让强制类型转换更明显,更安全,把不同情况下的强制类型转换分为四种,分别为:const_cast,字面上理解就是去const属性。static_cast,命名上理解是静态类型转换。如int转换成char。dynamic_cast,命名上理解是动态类型转换。如子类和父类之间的多态类型转换。reinterpreter_cast,仅仅重新解释类型,但没有进行二进制的转原创 2014-04-01 19:54:44 · 861 阅读 · 0 评论 -
在C++中子类继承和调用父类的构造函数方法
构造方法用来初始化类的对象,与父类的其它成员不同,它不能被子类继承(子类可以继承父类所有的成员变量和成员方法,但不继承父类的构造方法)。因此,在创建子类对象时,为了初始化从父类继承来的数据成员,系统需要调用其父类的构造方法。如果没有显式的构造函数,编译器会给一个默认的构造函数,并且该默认的构造函数仅仅在没有显式地声明构造函数情况下创建。构造原则如下:转载 2014-03-28 17:49:06 · 916 阅读 · 0 评论 -
C++ malloc/free和new/delete
A a;A * a = new a();以上两种方式皆可实现类的实例化,有new的区别在于:1.前者在栈中自动分配内存,后者在堆中动态分配内存分配,在一般应用中是没有什么区别的,但动态内存分配会使对象的可控性增强。2.用new开辟的内存,必须用delete删除;不用new,系统会自动回收内存new创建类对象,使用完后需使用delete删除,跟申请内存类似。所以,new有原创 2014-03-28 21:33:30 · 997 阅读 · 0 评论 -
Windows安装Bundler
1. Bundler简介Bundler是一个采用C和C++开发的称为sfm(struct-from-motion)的系统,它能够利用无序的图片集合(例如来自网络的图片)重建出3D的模型。最早的版本被用在Photo Tourism的项目上。项目的官方网站在此:http://phototour.cs.washington.edu/。Bundler的输入是一些图像、图像特征以及图像匹配信息,输出原创 2013-06-18 15:07:24 · 11479 阅读 · 1 评论 -
C/C++资源
开发工具:VIM 骨灰级玩家专属emacs 骨灰级玩家专属code::blocks 入门级推荐codelite 入门级首选eclipse+CDT 如果你经常用eclipse就直接装个cdt的插件吧netbeans 习惯netbeans的首选anjuta gtk首选 KDeveloper 曾经的Linux下经典开发工具Xcode Mac系开发首选QtCreat转载 2013-09-20 21:08:08 · 11653 阅读 · 0 评论 -
fopen中w和wb的区别
在C语言中,经常用到fopen打开文件,准备进行写操作,再用fwrite把数据写入文件,最后用fclose关闭文件。如以下C代码:#include char buf[10] = {10,10,10,10,10,10,10,10,10,10};FILE *fp = fopen("c:\\test.dat","w");fwrite(buf,1,10,fp);fclo原创 2013-09-26 17:47:24 · 21043 阅读 · 0 评论 -
C++内存管理
转自:http://www.cppblog.com/yehao/articles/166885.html[导语]内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内存管理在C++中无处不在,内存泄漏几乎在每个C++程序中都会发生,因此要想成为C++高手,内存管理一关是必须转载 2014-03-28 21:40:34 · 882 阅读 · 0 评论 -
svn文件冲突,树冲突详解
转自:http://apps.hi.baidu.com/share/detail/2530590解决冲突偶尔,当你从版本库更新、合并文件时,或者切换工作副本至一个不同的 URL 时你会遇到冲突。有两种冲突:文件冲突当两名(或更多)开发人员修改了同一个文件中相邻或相同的行时就会发生文件冲突。树冲突当一名开发人员移动、重命名、删除一个文件或文件夹,而转载 2014-04-17 10:55:13 · 2934 阅读 · 0 评论 -
C++ 虚函数表解析
转自:http://blog.csdn.net/haoel/article/details/1948051 -陈皓前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如转载 2014-03-31 15:12:10 · 536 阅读 · 0 评论 -
C++拷贝构造函数详解
一. 什么是拷贝构造函数首先对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a = 100; int b = a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。#include using namespace std;class CExample {private:转载 2014-04-01 14:26:56 · 593 阅读 · 0 评论 -
linux makefile实例解析
准备: 准备三个文件:file1.c, file2.c, file2.h file1.c: #include #include "file2.h" int main() { printf("print原创 2014-04-17 21:24:50 · 5384 阅读 · 1 评论 -
C++ 命名空间namespace
命名空间在C++中,名称(name)可以是符号常量、变量、宏、函数、结构、枚举、类和对象等等。为了避免,在大规模程序的设计中,以及在程序员使用各种各样的C++库时,这些标识符的命名发生冲突,标准C++引入了关键字namespace(命名空间/名字空间/名称空间/名域),可以更好地控制标识符的作用域。MFC中并没有使用命名空间,但是在.NET框架、MC++和C++/CLI中,都大量使用了命名转载 2014-04-01 21:22:07 · 1023 阅读 · 0 评论 -
Linux下 makefile编写 详细教程
概述——什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写m转载 2014-04-17 13:55:48 · 2595 阅读 · 0 评论 -
Linux下makefile的编写
# 一 、 操作系统及shell相关#########################################################################################指定使用的shell及取得操作系统类型,宏定义常用shell命令 #指定SHELL ,SHELL := /bin/sh ,或者使用当前SHELL设置#SHELL :=转载 2014-04-17 21:44:25 · 1110 阅读 · 0 评论 -
Linux的.a、.so和.o文件
我们通常把一些公用函数制作成函数库,供其它程序使用。函数库分为静态库和动态库两种。静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在。本文主要通过举例来说明在Linux中如何创建静态库和动态库,以及使用它们。在创建函数库前,我们先来准备举例用的源程序,并原创 2014-04-14 17:03:37 · 36783 阅读 · 8 评论 -
C++ 公有继承、保护继承、私有继承的区别
1)基类成员对派生类的可见性1. 公有继承(public) :基类的公有成员和保护成员作为派生类的成员时,它们都保持原有的状态,而基类的私有成员仍然是私有的,不能被这个派生类的子类所访问。2. 私有继承(private) :基类的公有成员和保护成员都作为派生类的私有成员,并且不能被这个派生类的子类所访问。3. 保护继承(protected) :基类的所有公有原创 2014-03-28 17:05:13 · 6574 阅读 · 1 评论 -
C/C++ volatile关键字
1. 为什么用volatile? C/C++ 中的 volatile 关键字和 const 对应,用来修饰变量,通常用于建立语言级别的 memory barrier。这是 BS 在 "The C++ Programming Language" 对 volatile 修饰词的说明:A volatile specifier is a hint to a compiler th原创 2014-04-01 10:28:13 · 726 阅读 · 0 评论 -
C++ 对象的内存布局(上)
转自:http://blog.csdn.net/haoel/article/details/3081328 -陈皓对象的影响因素 简而言之,我们一个类可能会有如下的影响因素: 1)成员变量2)虚函数(产生虚函数表)3)单一继承(只继承于一个类)4)多重继承(继承多个类)5)重复继承(继承的多个父类中其父类有相同的超类)6)虚拟继承(使用virtual转载 2014-03-31 16:33:24 · 660 阅读 · 0 评论 -
Linux下设置环境变量的几种方法
1.Linux的变量种类 按变量的生存周期来划分,Linux变量可分为两类: 1.1 永久的:需要修改配置文件,变量永久生效。 1.2 临时的:使用export命令声明即可,变量在关闭shell时失效。2.设置变量的三种方法 2.1 在/etc/profile文件中添加变量【对所有用户生效(永久的)】 用VI在文件/etc/profile文原创 2014-11-12 14:10:09 · 1463 阅读 · 0 评论