C++ - 技术教程文章

C++ 类的大小计算【代码】

class A { };class B {char ch;virtual void func0() { } };class C {char ch1;char ch2;virtual void func() { }virtual void func1() { } };class D : public A, public C {int d;virtual void func() { }virtual void func1() { } };class E : public B, public C { public:int e;virtual void func0() { }virtual void func1() { }//子类里(E)没有实现func(),所以在E的子类里B的vfptr指向C的func()和E的func1()v...

C++——函数(二)【代码】【图】

函数的重载看下面的max函数//返回两数间的最大值int max (int num1, int num2) {//比较num1和num2if (num1 >= num2) {return num1; } else {return num2; } }如果我们想要比较两个浮点数的最大值,那么我们就不能使用max()这个函数了。可实际上max就是返回最大值的意思,应该实现所有数据类型的比较,这时候就要用到函数重载。函数重载,就是改变函数的参数列表而不改变函数名,以实现不同的参数传入。见下面的代码#include ...

C++学习笔记 <const限定词>

1、cons可以限定一个变量,是的它的值不能被改变2、默认情况下,const对象仅在文件内有效。 编译器在编译时,会把程序中所有用到const变量的地方替换成const的初始值,因此每个用到const变量的文件中都要有const变量的定义,为了支持这一用法,同时避免同一变量的多次定义,const对象被设定为仅在文件内有效,当多个文件中出现了同名的const对象时,等同于分别在每个文件中定义了独立的变量。如果要在不同的文件中使用同一个...

混编用到 C++中数组和vector 复习下大学课本【代码】

本文基于邓俊辉编著《数据结构(C++语言版)(第3版)》、《C++ Primer(第5版)》以及网上的相关博文而写,博主水平有限,若有不妥处,欢迎指出。 一、数组C++中数组是一种内置的数据类型。数组是存放类型相同的对象的容器,数组的大小确定不变,不能随意向数组中增加元素。1、定义和初始化内置数组(1)数组的大小不变,(a[d],d为数组的维度),数组的维度必须是一个常量表达式。定义数组的时,必须指定数组的类型和大小。(2)...

C++@重载函数【代码】

关于重载详细分析参考:http://www.cnblogs.com/skynet/archive/2010/09/05/1818636.html内部机制涉及重载函数如何解决命名冲突,调用匹配的问题。 分辨重载的准则:精确匹配:参数匹配而不做转换,或者只是做微不足道的转换,如数组名到指针、函数名到指向函数的指针、T到const T;提升匹配:即整数提升(如bool 到 int、char到int、short 到int),float到double使用标准转换匹配:如int 到double、double到int、double到long do...

浅谈C++多态性

C++编程语言是一款应用广泛,支持多种程序设计的计算机编程语言。我们今天就会为大家具体介绍当中C++多态性的一些基本知识,以方便大家在学习过程中对此可以有一个充分的掌握。多态性能够简单地概括为“一个接口,多种方法”,程序在执行时才决定调用的函数,它是面向对象编程领域的核心概念。多态(polymorphisn),字面意思多种形状。C++多态性是通过虚函数来实现的,虚函数同意子类又一次定义成员函数,而子类又一次定义父类的做法...

数学函数(C/C++)

C中包含头文件<math.h>C++包含头文件<cmath>函数 double cos(double)该函数返回弧度角(double型)的余弦double tan(double)该函数返回弧度角(double型)的正切double sin(double)该函数返回弧度角(double型)的正弦double log(double)该函数返回参数的自然对数double pow(double x,double y)该函数返回x的y次方double hypot(double)该函数返回两个参数的平方总和的平方根;也就是说,参数作为一个直角三角形的两个直...

【C++】Item18. Make interfaces easy to use correctly and hard to use incorrectly【代码】【图】

接口容易被正确使用,不易被误用c++简单工厂模式时,初级实现为ITest* CreateTestOld(), 然后用户负责释放返回的对象。如果忘记释放就会造成memory leak,所以在设计工厂接口时就应屏蔽这个潜在的问题,这时就可以用智能指针shared_ptr<ITest> CreateTest(),由他负责对象资源的管理,而对客户端的使用来说更简洁了。 1 #include "stdafx.h" 2 #include <memory>3 #include <iostream>4usingnamespace std;5 6class ITest7{8pu...

设置c++程序的堆栈空间解决栈溢出问题

设置c++程序的堆栈空间解决栈溢出问题 程序的静态数据量大的时候,有时候会出现栈溢出问题,往往是程序还没运行算法呢,就down掉了,比如你在创建包含大数组的类(或数据)的时候,栈就溢出了。这是由于系统分配给程序的栈空间太小。 一种方法,就是不要静态分配,用new动态创建,是从堆中分配的,堆的空间足够大,不过记得写析构函数,delete你申请的堆空间。其实这样也挺方便,类结束的时候会自动调用析构函数释放空间。养成"不在...

C++实现将一个文件夹内容拷贝至另一个文件夹【代码】

Windows提供了非常好用的方法SHFileOperation,而且功能强大, 不光可以拷贝,还有移动、删除等等操作。直接上代码: 1void CopyFolder(TCHAR* srcFolder, TCHAR* dstFolder)2{3 SHFILEOPSTRUCT fop = {0};4 fop.fFlags = FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_NOCONFIRMMKDIR;5 fop.wFunc = FO_COPY;//选择执行类型,FO_COPY,FO_DELETE,FO_RENAME,FO_MOVE四种 6 7 fop.pFrom = srcFolder;//如:...

AVL树C++实现

//AVL树#include<iostream> #include<functional> using namespace std; class avl_tree { private:struct tree{int data;tree* L;tree* R;int height;tree(int data_) :data(data_), L(0), R(0), height(0){}};tree* root; public:avl_tree() :root(0){}void Insert(int data){function<void(tree*&, int)> ins = [&](tree*& r, int d){if (r == NULL){r = new tree(d);}else if (d < r->data){ins(r->L, d);if (Height(r->L) - H...

Got Stucked in C++ Static Library Loading.. for some time【代码】

I used to load library using 1 single .dll file, so when I happen to do method calling between 2 projects in a solution, I got puzzled..In the solution, doing method calling between projects is constant, so as far as I can see, the dynamic calling method is onerous. It‘s also not Okay to call method from the other project directly, that will invoke the unresolved external link error(2001,1014,201...

[0318]C++简单程序设计-2

南京信息工程大学实验报告实验名称 C++简单程序设计-2 实验日期 2018-3-20 得分 指导教师 耿学华 系 计软院 专业 计嵌+软嵌 年级 2017 级 班次 (1) 姓名 施昊阳 学号 20161334026 [toc]一、实验目的理解和掌握 C++中函数的定义与使用方法理解 C++中函数调用过程中值传递与引用传递的区别灵活、综合运用 C++中分支结构、循环结构及 continue、break 等应用编程求解问题。二、实验准备实验前,请围绕以下内容预习/复习指定内容C++中函...

XXTEA 加密算法 C++ C#兼容版本号【图】

1.一个不错的可逆加密算法XXTEA之前无意中看到了TexturePacker 使用了XXTEA来加密图片资源。所以花了点时间来看了下XXTEA。一般有两种加密算法:1.像md5,SHA1,等hash算法,是不可逆的。一般数据库存的username和password就用这个。 2.本文所提到的XXTEA算法,是可逆的,有个key能够加密。安全方面的东西还蛮多的,说到key,还有什么public key, private key,我都还给老师了。忘光了。可逆加...

C/C++:[2]enum-枚举量声明、定义和使用【代码】【图】

C/C++:[2]enum-枚举量声明、定义和使用转自:http://jingyan.baidu.com/article/e75aca85526c1b142edac6d9.html众所周知,C/C++语言可以使用#define和const创建符号常量,而使用enum工具不仅能够创建符号常量,还能定义新的数据类型,但是必须按照一定的规则进行,下面我们一起看下enum的使用方法。 工具/原料Microsoft Visual Studio 2012(或其他版本)步骤1——枚举量的声明和定义1首先,请看下面的语句:enum enumType {Monda...

C++第12章

第12章,类和动态内存的分配12.1动态内存和类 12.1.1 复习范例和静态类成员 1,不能在类声明中初始化静态成员遍历变量,这是因为声明描述了如何分配内存,但是并不分配内存。同时对于静态类成员,可以在类声明之外使用单独的语句来进行初始化。但是如果静态成员是整型或枚举型const,则可以在类声明中初始化。 2,在构造函数中使用new来分配内存时,必须在相应析构函数中使用delete来释放内存。 如果使用new[](包...

C++对象生命周期(未完)【代码】【图】

1.栈中生成的对象,其作用域为其在的{}中。遇到右括号}后执行析构函数。2.堆中生成的对象,即new生成的动态对象,需要delete执行析构函数。<pre name="code" class="cpp">#include<iostream> #include<string> #include<cstdio> using namespace std; class WithCC { public:int id;WithCC(int i):id(i) {printf("执行id为 %d 的WithCC构造函数!\n",id);}~WithCC() {printf("执行id为 %d 的WithCC析构函数!\n",id);} }; WithCC w...

C++语言笔记系列之十——静态成员

1.静态成员 (1)由keywordstatic修饰 静态变量定义语句在编译阶段就运行,运行过程中不再运行。 (2)分类:静态数据成员、静态成员函数。 (3)静态成员时类的全部对象共享的成员,而不是某一个对象的成员。 2.静态成员的使用 (1)在定义说明前加上statickeyword。比如: static int x; (2)静态数据成员必须进行初始化,而且初始化必须在类外完毕。 (3)静态数据成员的初始化 数据类型 类名::静态数据成员名 = 值。//注意...

浅析C++继承与派生【图】

测试环境:Target: x86_64-linux-gnugcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2.1) 定义要分析继承,首先当然要知道什么是继承:继承是面向对象程旭设计中使代码可以复用的最重要的手段,它允许程序员在原有类特性的基础上进行扩展,增加功能。这样产生的新类,就叫做派生类(子类)。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。继承的格式class 子类名 :继承权限 基类名比如下面分别定义了两...

C++学习(四)入门篇——函数调用【代码】

程序清单2.5 ourfunc.cpp //ourfunc.cpp - - defining your own function #include <iostream> void simon(int);int main() {usingnamespace std;simon(3);cout << "Pick an integer:";int count;cin >> count;cin.get();simon(count);cout << "Done!" << endl;cin.get();return0; }void simon(int n) {usingnamespace std;cout << "Simon says touch your toes " << n << " times." << endl; }1.函数格式type functionname(argum...

[c++面试准备]--vector对象是如何增长的【代码】

参考资料:cpp primer 5th背景:为了支持快速的访问,vector/string将元素连续存储--每个元素都是紧挨着前一个元素存储。如果我们向vector/string中添加新的元素,会发生什么:由于连续存放的缘故,当没有多余的空间来容纳新的元素的时候,容器必须分配新的空间来保存已有的元素和新元素,将已有元素从旧位置移动到新空间中,然后添加新的元素,释放旧的空间。 vector不会对新添加的每一个元素都做上述操作,效率太慢。所以vector会...

C++模板:二分查找【代码】【图】

bool find(int x,int l,int r) {if(l>r)returnfalse;int mid=(l+r)/2;if(s[mid]==x)returntrue;elseif(s[mid]>x)return find(x,l,mid-1);elsereturn find(x,mid+1,r); }原文:http://www.cnblogs.com/forever97/p/3541029.html

C++ - 二分查找完整版(包括注意细节)【代码】

int getPos(vector<int> A, int n, int val) int left = 0;int right = n-1; int index = n; while(left <= right){int mid = (left+right)/2;if(A[mid] == val) { if(mid < index) index = mid; right = mid -1; }else if(A[mid] > val)right = mid-1;else if(A[mid] < val)left = mid+1;} if(index != n) return index; else return...

Linux C/C++调用shell命令后获取shell返回值【代码】

Linux C/C++调用shell命令后获取shell返回值项目中C/C++调用shell命令后,某系处理返回值的过程是以“临时文件”的方式进行;即shell命令执行后将返回值存放在临时文件(如temp.txt),C/C++程序再访问文件,获取shell的返回值。最经典的就是调用WiFi(iwlist wlan0 scan )扫描指令查询WiFi节点,然后解析获取WiFi数量、名称、信号强度、加密方式等信息。通过“临时文件”的方式交互数据,是比较简单、易用和易理解的方式,在多进...

C++11 多线程 future/promise简介【代码】

1. < future >头文件简介Classes std::future std::future_error std::packaged_task std::promise std::shared_futureFunctions std::async std::future_category2. std::future简单来说,std::future提供了一种访问异步操作结果的机制。从字面意思看,它表示未来。通常一个异步操作我们是不能马上就获取操作结果的,只能在未来某个时候获取。我们可以以同步等待的方式来获取结果,可以通过查询future的状态(future_statu...

C++实现Point类【图】

程序代码#include <iostream>using namespace std;class Point//点类 { public://使用初始化表初始化点类Point(double a = 0, double b = 0):x(a), y(b){}double getX();//得到x坐标double getY();//得到y坐标//重载<<实现点的坐标的输出friend ostream& operator<<(ostream &output, Point &p);protected:double x;//x坐标double y;//y坐标 };//得到x的值 double Point::getX() {return x; }//得到y的值 double Point::getY() {re...

VC++编程中为程序加入启动画面功能【图】

如何为自己的程序加入启动画面 观察我们平常使用的软件,当我们双击软件的时候,会在主界面出现前,先行出现一个启动画面,由于前一阵子写了一个基于对话框的程序,亲自实验了下,今天就为大家简单的介绍下,在我们的程序中如何实现增加启动画面的功能。 在这里说明说明一下,我们平常使用的编译器是VS2010 或者是VS2012,在早一点的版本中,例如vc6.0中,加入启动画面这一功能,编译器已经为我们封装好,我们直接使用他所提供的...

效率c++总结 参照2011版

关于c++基本1、将c++视为语言联邦 它有4个层次:c、面向对象、泛型、stl库2、对于单纯常量,最好用const对象或enums替换#define enums为用户刻画了一组有范围的值3、对于形似函数的宏,用inline代替#define4、尽量、大胆地使用const,编译器强制实行bitwise constness(保证物理常量性),表现为在编译阶段检测有无非法的赋值语句,但编程应使用“逻辑常量性” mutable 关键字可以解决部分问题5、当const和non-const成员函数有...

第四次C++【代码】【图】

继承与派生一、什么是继承和派生所谓继承就是从先辈处得到属性和行为特征。类的继承,是新的类从已有类那里得到已有的特性。从另一个角度来看这个问题,从已有类产生新类的过程就是类的派生。类的继承与派生机制允许程序员在保持原有类特性的基础上,进行更具体、更详细的修改和扩充。由原有的类产生新类时,新类便包含了原有类特征,同时也可以加入自己所特有的新特性。原有的类称为基类或父类,产生的新类称为派生类或子类。 面向...

C++ allocator 自定义指南【代码】

闲话昨天培神在群里抱怨说自定义allocator遇到了奇怪的问题,然后选择了pmr,我表示很理解。allocator这个东西,出生时就伴随着设计错误和无用的抽象,C++03-14糊了这么久,甚至还加了新feature来兼容旧翔和糊新翔,结果C++17最终还是另立门派搞了个pmr。简单说,虽然allocator的concept说了很多东西,也有一些周边的concept比如allocator aware container和语言设施如allocator_traits的支持,allocator的自定义依然收到了极大的限...