
c++
melon_eater
这个作者很懒,什么都没留下…
展开
-
函数调用传递对象问题
先看看代码class Test{public: int *pInt; Test() { pInt=new int[10]; for(int i=0;i<10;i++) { pInt[i]=i*i; } } ~Test() { delete []p原创 2017-09-25 22:10:31 · 319 阅读 · 0 评论 -
c++ primer plus阅读笔记14---虚基类
虚基类 我们来看一个例子:class work{ ...};class singer:public work{ ...};class waiter:public work{ ...};class singer_waiter:public singer,public waiter{ ...};上面的代码中,基类(爷爷)派生了两个子类(父亲),sin原创 2017-09-03 15:09:44 · 346 阅读 · 0 评论 -
explicit关键字的用法
转载自:http://blog.youkuaiyun.com/smilelance/article/details/1528737按照默认规定,只有一个参数的构造函数也定义了一个隐式转换,将该构造函数对应数据类型的数据转换为该类对象,如下面所示:class String {String ( const char* p ); // 用C风格的字符串p作为初始化值//…}String s1转载 2017-09-22 09:14:28 · 270 阅读 · 0 评论 -
智能指针
我们先来看代码:void func(){ string *s=new string("test"); ... return;}上边这个函数,如果在结束之前没有用释放s指向的内存,造成内存泄露。 有没有不需要手动释放这块内存的方法呢? 我们来看s指针是一个局部变量,在func函数结束的时候,会释放掉func函数的局部变量,如果我们把这个局部变成一个对象,相应的这个对象在原创 2017-09-22 12:15:49 · 281 阅读 · 0 评论 -
左值和右值move.forward
转自:https://www.ibm.com/developerworks/cn/aix/library/1307_lisl_c11/ 新特性的目的 右值引用 (Rvalue Referene) 是 C++ 新标准 (C++11, 11 代表 2011 年 ) 中引入的新特性 , 它实现了转移语义 (Move Sementics) 和精确传递 (Perfect Forwarding)。它的主要目转载 2017-10-30 14:27:28 · 517 阅读 · 1 评论 -
STL自定义比较器
对于下边这个结构我们需要按照age排序struct Person{ string name; int age;}//自定义的比较器struct compareByAge{ bool operator()(const Person& p1,const Person p2) { return p1.age<p2.age; }}//构造ve原创 2017-11-08 22:13:11 · 1338 阅读 · 0 评论 -
linux调试器的实现---有关寄存器操作的实现
在这里,依旧是我们的利器ptrace//reg.h#ifndef DEBUGGER_REG_H#define DEBUGGER_REG_H#include <string>#include <boost/mpl/size_t.hpp>#include <array>#include <algorithm>enum class reg { rax,rbx,rcx,rdx,原创 2017-11-14 20:51:05 · 549 阅读 · 0 评论 -
关于析构函数和构造函数的调用
代码如下:编译加上参数:-fno-elide-constructors,其中析构函数还有问题,请大神指导#include <iostream>using namespace std;class CNumber{public: CNumber() { m_nNumber=10; cout<<"构造函数"<<e...原创 2018-04-19 00:33:56 · 384 阅读 · 0 评论 -
深入理解虚函数
我们先来看一下没有继承的情况下有虚函数的对象的内存布局: 在对象的最开始处,是一个虚函数表指针,这个指针指向了一个虚函数表,表中的每一项都是一个虚函数的地址。接着来看看代码,如何不通过对象直接调用虚函数?甚至调用对象的私有函数。 直接上代码吧,详细解释看注释:#include <iostream>using namespace std;class A{public: A()原创 2018-04-19 12:03:41 · 240 阅读 · 0 评论 -
指针和引用的区别
经常看到网上有人说引用和指针其实是一样,底层都是指针,也没有人来详细分析一下,今天我们来看一看。int main(){ int a=10; int &b=a; b=20;} 0x00000000004028de <+0>: push %rbp 0x00000000004028df <+1>: mov %rsp,%rbp...原创 2018-04-27 12:19:44 · 179 阅读 · 0 评论 -
不执行main函数可以执行一段程序吗?
看代码:int main(){ printf("main\n"); //从运行结果来看,并没有执行main函数}void func(){ printf("不想执行main函数\n"); exit(0);}__attribute((destructor))void after(){ printf("after\n");}__attribute...原创 2018-04-27 17:26:18 · 746 阅读 · 1 评论 -
泛化,特化,偏特化,traits
template<typename T>struct _type_traits{ //泛化 T t;};template<>struct _type_traits<int>{ //特化 int i;};_type_traits<Foo>::t;//使用泛化版本_type_traits<int&g...原创 2018-05-15 13:54:56 · 1007 阅读 · 0 评论 -
如何绕过类的权限检查访问private变量?
主要原理就是:首先搞明白对象的内存布局,然后直接用对象的首地址加上某个成员变量在对象中的偏移值去访问。下边代码中的这个例子,对象的内存布局为:直接用首地址加上偏移值去访问即可。#include <iostream>using namespace std;class CNumber{public: CNumber() { this->nums=10; this-...原创 2018-06-22 22:55:02 · 584 阅读 · 0 评论 -
c++ primer plus阅读笔记13---虚函数 为什么要虚析构函数?
虚函数 虚函数主要是用来实现动态多态的,我们来看下边的代码:class Base{ ... public: void function() { ... }};class Extends:public Base{ ... public: void function()原创 2017-08-17 17:16:18 · 417 阅读 · 0 评论 -
c++ primer plus阅读笔记12---手动调用析构函数
再谈定位new运算符 我们来看代码:#include <iostream>#include <string>#include <new>using namespace std;const int BUF=512;class JustTestting{private: string words; int number;public: JustTestting(原创 2017-08-17 12:06:35 · 1756 阅读 · 0 评论 -
默认构造函数和拷贝构造函数
默认构造函数:class testClass{public: testClass(); /* 默认构造函数 */ testClass(int a, char b); /* 构造函数 */ testClass(int a=10,char b='c'); /* 默认构造函数 */private: int m_原创 2017-09-24 15:41:02 · 757 阅读 · 0 评论 -
c++ primer plus阅读笔记1---cin换行符等问题
1.关于cincin 使用空白(空格,制表符和换行符)来确定字符串结束的位置,这意味着cin在获取字符串数组输入时只读取一个单词。读取单词后,cin将该字符串放到数组中,并自动在结尾添加空字符。2.面向行的输入:getline()和get()getline()读取整行,它使用通过回车键输入的换行符来确定输入结尾。getline(name,20) 读取20个字符到name数组中,不保原创 2017-08-09 13:35:50 · 2735 阅读 · 0 评论 -
c++ primer plus阅读笔记2---结构体共用体枚举
1结构体中的位字段struct torgle_register{ unsigned int SN :4 //SN 占用4个bit unsigned int :4 // 4bit没有占用 bool goodIn :1 //goodIn占用1个bit bool goodTorgle :1 //goodTorgle占原创 2017-08-09 22:15:34 · 387 阅读 · 0 评论 -
c++ primer plus阅读笔记3---指针问题
1.指针的危险我们来看这样一个例子:long* fellow; *fellow=23333; fellow确实是一个指针,但是指向哪里呢?上述代码没有将地址赋值给fellow,那么23333将被放在哪里呢?我们不知道。由于fellow的值没有内初始化,他可能有任何值。不管值是什么,程序都将它解释位存储23333的地址。因为这个地址是未知的,有可能超原创 2017-08-11 16:59:47 · 253 阅读 · 0 评论 -
c++ primer plus阅读笔记4---struct
1.struct 什么时候后用. 什么时候用->当struct有名字时候使用.,例如:struct person{ int age; char *name;}person per;per.age; //可以用点person *p=&perp->age; //用->2.c语言和c++中结构体的区别在C语言中,定原创 2017-08-12 16:45:17 · 278 阅读 · 0 评论 -
c++ primer plus阅读笔记5---指针const函数指针数组
1.指针和const指向常量的指针:int age=39;const int *pt=&age; //这句话的意思是相对指针pt来说,age的值是常量,例如下边这种操作就是非法操作*pt+=1; //非法操作,但是age不是常量,可以使用通过age修改值*pt=20 //非法操作age=20 //合法操作指针的值本身是常量:int *const p=&age; //指针常量,指针指原创 2017-08-13 15:57:10 · 368 阅读 · 0 评论 -
c++ primer plus阅读笔记6---内联函数引用变量
1.内联函数 普通函数的调用过程中,在汇编层次看,首先将函数的返回地址压栈,然后call函数,跳转到函数的代码块去执行,完了之后从栈里弹出来返回地址。 内联函数不需要跳转到函数的代码块。在编译时,编译器就已经将函数代码和其他代码块“内联起来了,也就是编译器将使用相应的函数代码替换函数调用。”这样程序就无需跳转到另一个位置执行代码再跳回来,但是缺点是占用更多内存。 2.引用变量 引用变量在生命原创 2017-08-13 21:23:55 · 277 阅读 · 0 评论 -
c++ primer plus阅读笔记7---模板特化
1.函数重载 仅仅函数的返回值类型不同不能实现重载; 参数只有const和非const类型的可以实现重载;原创 2017-08-14 17:27:25 · 321 阅读 · 0 评论 -
c++ primer plus阅读笔记8---decltype
decltype关键字 我们来看下边这样一种情况:template<class T1,class T2>void ft(T1 x,T2 y){ ... ?type? z=x+y; //因为x和y的类型不确定,因此写这个模板函数时候z的类型无法预知,怎么办呢?}c++有个decltype关键字,可以这么写:decltype(x+y) xpy=x+y;当返回值不确定时候,例如:原创 2017-08-15 20:34:05 · 313 阅读 · 0 评论 -
c++ primer plus阅读笔记9---内部外部链接
静态变量 我们来看以下几种情况:int global=1000;static int one_file=50;int main(){ ...}void func1(int n){ static int count=0;}上述的静态变量 global,one_file,count在整个程序执行的期间都存在,但是在func1函数中生命的count作用于为局部,但是即使f原创 2017-08-15 21:24:35 · 258 阅读 · 0 评论 -
c++ primer plus阅读笔记10---定位new using namespace
定位new运算符 通常,new运算符负责在堆中找到一个能够满足要求的内存块,但是定位运算符能让程序员指定需要使用的未知,可以被用来设置器内存管理,处理等需要堆特定内存地址处理的情况。使用定位new运算符时候要包含new头文件,用法举例:struct chaff{ char dross[20]; int slag;};char buffer1[50];char bu原创 2017-08-16 10:55:14 · 252 阅读 · 0 评论 -
c++ primer plus阅读笔记11---深拷贝与浅拷贝
浅拷贝与深拷贝 默认复制构造函数逐个复制非静态成员,复制的是成员的值。如果成员是类对象,则将使用这个类的复制构造函数来复制成员对象。有以下的代码:#include <iostream>class A{private: int *p;public: A() { p = new int[20]; std::cout<<"构造函数"<<st原创 2017-08-16 21:35:47 · 910 阅读 · 0 评论 -
多重继承,菱形继承下的虚函数表和虚基类表
虚函数与虚继承寻踪封装、继承、多态是面向对象语言的三大特性,熟悉C++的人对此应该不会有太多异议。C语言提供的struct,顶多算得上对数据的简单封装,而C++的引入把struct“升级”为class,使得面向对象的概念更加强大。继承机制解决了对象复用的问题,然而多重继承又会产生成员冲突的问题,虚继承在我看来更像是一种“不得已”的解决方案。多态让对象具有了运行时特性,并且它是软件设计复用的本质...原创 2018-08-06 14:54:46 · 1368 阅读 · 4 评论