
c++
文章平均质量分 57
db199410
这个作者很懒,什么都没留下…
展开
-
this指针详解
首先我们来看一段简单的代码:class A{public: void set(string name, int age) { Name = name; Age = age; }private: string Name; int Age;};int main(){ A a1, a2; a1.set原创 2016-05-23 19:27:16 · 642 阅读 · 0 评论 -
约瑟夫环的实现
首先介绍一下约瑟夫环: 约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。通常解决这类问题时我们把编号从0~n-1,最后[1] 结果+1即为原问题的解。在这里用数组实现以下约瑟夫环,请看题: 有n只猴子原创 2016-06-10 13:23:50 · 504 阅读 · 0 评论 -
虚表剖析
首先介绍一下虚表:在C++语言中,每个有虚函数的类或者虚继承的子类,编译器都会为它生成一个虚拟函数表(简称:虚表),表中的每一个元素都指向一个虚函数的地址。(注意:虚表是从属于类的)一.虚表的存在形式class Base{public: virtual void fun1() { cout << "Base::fun1()" << endl; }原创 2016-06-11 22:34:34 · 553 阅读 · 0 评论 -
探索友元的继承和传递问题
书上说,友元类是单向的,不可继承,不可传递,为了验证它,我完成了以下的测试环境:vs2013一.友元类继承1.A是B的友元类,A的public派生类能访问B的私有成员和保护成员吗?不可以!请看下面代码:class A;class B{public: friend class A;protected: int b1;private: int b2;};原创 2016-06-15 11:29:53 · 1094 阅读 · 0 评论 -
成员函数的重载,覆盖与隐藏
成员函数的重载,覆盖和隐藏是三个很容易混淆的概念,下面我们来区分一下这三者一 重载的特点 1 两个函数处于同一作用域中(即同一个类中) 2 函数名要相同 3 参数不相同(参数的个数,参数的类型,参数的顺序) 4 返回值可同可不同 5 virtual关键字可有可无二 覆盖的特点 1 两个在不同作用域中(基类与派生类) 2 函数名相同 3 参数相同 4 基类必须要有virtual关键字原创 2016-06-03 13:01:50 · 298 阅读 · 0 评论 -
c++中的常量折叠
何谓常量折叠? 常量折叠就是将常量表达式计算求值,并用求得的值来替换表达式,放入常量表。可以算作一种编译优化。(预编译阶段)接下来我们通过一段代码来分析一下了解一下常量折叠及其特性:int main(){ const int a = 10; int b = 2*a; int c = b; int *p = (int*)&a; *p = 100; c原创 2016-06-03 14:21:46 · 1265 阅读 · 0 评论 -
c++再回首之继承
继承乃c++三大特性之一,可见其重要性,所以今天特意将学习的知识拿出来好好总结了一下:如果发现本文中有错误,麻烦指明,谢谢! 一.继承概念继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。原创 2016-06-15 08:26:42 · 268 阅读 · 0 评论 -
c++知识点大总结
这是学习完c++以后,我自己总结的知识点。希望对大家有所帮助!!!原创 2016-07-15 23:15:44 · 553 阅读 · 1 评论 -
深度探索c++对象模型
所谓知己知彼,百战不殆。只有深入了解了c++对象的内存布局,我们才能更熟练运用c++这门语言。 运行环境vs2013一单继承和多继承的结合class C{public: C() :c(1){}private: int c;};class B1 :public C{public: B1() :C(), b1(2){}private: int b1;}原创 2016-06-16 17:40:53 · 829 阅读 · 0 评论 -
深入了解c++的动态绑定和静态绑定
为了支持c++的多态性,才用了动态绑定和静态绑定。理解他们的区别有助于更好的理解多态性,以及在编程的过程中避免犯错误。 需要理解四个名词: 1、对象的静态类型:对象在声明时采用的类型。是在编译期确定的。 2、对象的动态类型:目前所指对象的类型。是在运行期决定的。对象的动态类型可以更改,但是静态类型无法更改。 关于对象的静态类型和动态类型,看一个示例:class B { } cla转载 2016-06-05 15:48:52 · 276 阅读 · 0 评论 -
string类的实现
string类有两种实现方式:一:class String{public: String(char*pt = "")//使用缺省构造参数以满足无参对象和有参对象 { if (NULL == pt) { p = new char[1]; *p = '\0'; } else原创 2016-06-04 21:41:01 · 512 阅读 · 0 评论 -
如何访问类中的private成员变量
总所周知,类中的private属性的成员变量在类外是无法访问的,今天我们探讨的就是如何在类外访问private属性的成员变量。我们先来看一个简单的例子:class STU{public: STU() { x = 5; y = 10; }private: int x; int y;};int main(){ ST原创 2016-05-23 16:29:23 · 10733 阅读 · 0 评论 -
操作符的重载
一.什么是操作符的重载? 操作符的重载就是就是把已经定义的、有一定功能的操作符进行重新定义,来完成更为细致具体的运算等功能。二.为什么要进行操作符的重载? 当你自定义了一个类,想要把两个类对象相加,而传统的’+’无法对类对象进行运算,这时候就需要进行运算符的重载了。三.重载的过程中需要注意什么? 1.并不是所有操作符都可以被重载(例如:: . .* ?:)还有原创 2016-05-28 19:51:38 · 669 阅读 · 0 评论 -
c++基础知识总结
构造函数 1.构造函数没有返回值,函数名就是类名 2.构造函数可以重载,以满足对对象不同参数的需求。实参决定了调用哪个构造函数 3.构造函数在定义对象的时候由系统自动调用。且每个对象只调用一次。 4.无参构造函数和全缺省构造函数都是缺省构造函数,且这俩只能存在一个(二义性问题) 5.构造函数不可以用const修饰,因为常函数无法修改其值。 6.如果没有显式定义,系统会自动生成一个默认构造原创 2016-05-30 16:56:22 · 375 阅读 · 0 评论 -
谈一谈C和c++中struct关键字
一.C语言和c++中struct的区别 c语言是面向过程的语言,struct代表了一种数据构造类型,它只能用来定义数据成员,而不能用来定义函数struct Point { int x; // 合法 int y; // 合法 void print() {原创 2016-05-31 09:30:44 · 402 阅读 · 0 评论 -
vs中debug和relsese版本的区别
vs中的程序有debug和release两个版本,Debug通常称为调试版本,通过一系列编译选项的配合,编译的结果通常包含调试信息,而且不做任何优化,以为开发 人员提供强大的应用程序调试能力。而Release通常称为发布版本,是为用户使用的,一般客户不允许在发布版本上进行调试。所以不保存调试信 息,同时,它往往进行了各种优化,以期达到代码最小和速度最优。为用户的使用提供便利。 debug程序通常转载 2016-06-01 15:52:20 · 2008 阅读 · 0 评论 -
宏和内联的比较
c++中强制建议用const替代宏常量,用内联函数替代宏函数,这是为何?一.宏 首先我们来看下宏的优缺点: 优点:增强代码的复用性,提高性能 缺点:不方便调试(因为在预编译阶段就进行了替换) 可读性差,可维护性差,容易误用。 没有类型安全的检测。例:#define ADD( a, b ) a + bvoid Test (){ int a = 2; int b = 3原创 2016-06-01 17:07:04 · 287 阅读 · 0 评论 -
inline详解
本文介绍了GCC和C99标准中inline使用上的不同之处。inline属性在使用的时候,要注意以下两点:inline关键字在GCC参考文档中仅有对其使用在函数定义(Definition)上的描述,而没有提到其是否能用于函数声明(Declare)。从 inline的作用来看,其放置于函数声明中应当也是毫无作用的:inline只会影响函数在translation unit(可以简单理解为C源码文件)内转载 2016-06-02 09:30:52 · 496 阅读 · 0 评论 -
大小端存储
今天做到一道关于存储的题,顺便回顾一下大小端:union X{ int32_t a; struct { int16_t b; int16_t c; };};int main(){ X x; x.a=0x20150810; printf("%x,%x\n",x.b,x.c); return 0;}原创 2016-06-08 10:24:14 · 505 阅读 · 0 评论 -
malloc和new的十一个区别
一 属性 1 new/delete是c++操作符 2 malloc/free是c/c++标准的库函数二 申请内存所在位置 1 new:自由存储区:自由存储区是c++基于new操作符的一个抽象概念。通过new申请的内存都称为自由存储区,自由存储区可以为堆,也可以为静态存储区(取决于operator new()在哪里为对象分配内存)。 2 malloc:堆:堆是操作系统的术语,是系统维护的原创 2016-06-03 09:36:14 · 274 阅读 · 0 评论 -
模拟实现智能指针
众所周知,智能指针是用来管理指针的,为了避免开辟了空间而忘记释放的情况。 下面我们分别来模拟实现以下boost库中三种智能指针的实现,他们分别是auto ptr,scoped ptr,shared ptr。一.auto ptr旧版本的实现:template <typename T>class Auto_ptr{public: Auto_ptr(T*ptr = NULL) :_pt原创 2016-08-16 23:58:12 · 445 阅读 · 0 评论