C++
不忘初心-慢慢懂
纳百川,形成自己知识体系
展开
-
STL set之求交并差
#include #include #include #include using namespace std;struct compare{ bool operator ()(string s1,string s2) { return s1>s2; }///自定义一个仿函数};int main(){typedef std::set _SET;_SET s;s.in转载 2014-08-27 08:40:55 · 879 阅读 · 0 评论 -
C++ 之模板
主要探索函数模板和类模板:函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表。这个通用函数就称为函数模板。定义函数模板的一般形式为: template typename T2> 或 template T T1 T2 代表是不同类型参数 通用函数定义 通用函数定义应注意它只适用于函数的参数个数相同而原创 2013-12-11 11:55:03 · 1154 阅读 · 0 评论 -
C++ STL 之set
/*set/multiset会根据待定的排序准则,自动将元素排序。两者不同在于前者不允许元素重复,而后者允许。1) 不能直接改变元素值,因为那样会打乱原本正确的顺序,要改变元素值必须先删除旧元素,则插入新元素2) 不提供直接存取元素的任何操作函数,只能通过迭代器进行间接存取,而且从迭代器角度来看,元素值是常数3) 元素比较动作只能用于型别相同的容器(即元素和排序准则必须相同)s转载 2013-12-02 17:40:10 · 709 阅读 · 0 评论 -
动态联编 和 静态联编
关于 动态联编 和 静态联编 这个概念,自己听了老师上课讲的课仍然没有明白原理。那么既然这样,只能自己去学习了。首先我们知道的是,动态联编 和 静态联编 都是多态性的一种体现。关于面向对象的三个基本要素:封装(类型抽象), 继承 和 多态。首先我们从概念性上面了解了 动态联编 和 静态联编 的功能:实现了多态性。然后我们从最最基本的开转载 2013-12-02 23:35:45 · 878 阅读 · 0 评论 -
C++之类继承
主要探索:1 派生类对基类protecteed public private三种数据访问 和这三种继承方式比较。2 派生类包含子对象。3 子类包含构造函数。通过public方式继承:具体示例:#include #include using namespace std;//定义基类class people{ //子类私有对象只能在本类访问,与继原创 2013-11-24 15:03:07 · 1049 阅读 · 0 评论 -
C++之 运算符重载
主要探索关于在类内部定义运算符重载和定义友元重载单目运算符重载和双目运算符重载。在类内定义双目运算符重载和双目运算符重载示例:具体示例:#include #include using namespace std;class complex{private: double _real; double _imag;public: complex():_real(0.0原创 2013-11-23 18:49:12 · 1107 阅读 · 0 评论 -
C++ STL 之stack
stack 模板类的定义在头文件中。stack 模板类需要两个模板参数,一个是元素类型,一个容器类型,但只有元素类型是必要的,在不指定容器类型时,默认的容器类型为deque。定义stack 对象的示例代码如下:stack s1;stack s2;stack 的基本操作有:入栈,如例:s.push(x);出栈,如例:s.pop();注意,出栈操作只是删除栈顶元素,并不原创 2013-12-02 13:28:28 · 1077 阅读 · 0 评论 -
内存空间分析(整理收集)
变量可以分为全局变量、静态全局变量、静态局部变量和局部变量按存储区域分:全局变量、静态全局变量和静态局部变量都存放在内存的全局数据区,局部变量存放在内存的栈区按作用域分:全局变量在整个工程文件内都有效;静态全局变量只在定义它的文件内有效;静态局部变量只在定义它的函数内有效,只是程序仅分配一次内存,函数返回后,该变量不会消失;局部变量在定义它的函数内有效,但是函数返回后失效。全局变量和静转载 2013-12-02 23:22:48 · 869 阅读 · 0 评论 -
C++ 拷贝构造函数(即复制构造函数)和赋值运算符重载(有说赋值构造函数)区别
如果不主动编写拷贝构造函数和赋值函数,编译器将以“位拷贝”的方式自动生成缺省的函数。倘若类中含有指针变量,那么这两个缺省的函数就隐含了错误。以类String 的两个对象a,b 为例,假设a.m_data 的内容为“hello”,b.m_data 的内容为“world”。现将a 赋给b,缺省赋值函数的“位拷贝”意味着执行b.m_data = a.m_data。这将造成三个错误:一是b.m_dat原创 2013-12-13 18:02:11 · 2221 阅读 · 0 评论 -
深入理解C++ 之 赋值运算符函数
1 函数返回值声明为该类型引用,并在函数结束前返回实例自身引用即(*this) ,只有返回引用才能进行连续赋值2 传入参数类型为常量引用,若果传递是实例,会调用一次复制构造函数,减少消耗,提高效率,加上const不会改变传入实例值3 释放实例本身已有内存,避免造成内存泄露4 判断传入实例和当前实例是否相同,相同返回,否则直接进行赋值,一旦释放自身内存,传入参数内存也被释原创 2013-12-13 20:07:35 · 1409 阅读 · 0 评论 -
fork函数简介
包括: fork函数简介fork函数的两次返回和父子进程的执行顺序简介fork()子进程与父进程之间的文件描述符问题 [cpp] view plaincopyprint? 1 1 #include转载 2014-08-12 12:25:42 · 953 阅读 · 0 评论 -
sizeof 和类继承 虚继承 求类大小
代码:#include using namespace std;/*class a{ float k; // 4字节 virtual void foo(){} //有一个4字节的指针指向自己的虚函数表};class b : virtual public a{ virtual void f(){}}; 有这样的一个指针vptr_b_a,这个指针叫虚类指针,也是四个字节原创 2014-08-07 19:26:33 · 2068 阅读 · 4 评论 -
把字符串转换为整数
注意问题:1)字符串是空指针的情况。2)如果输入的是一个空字符串“”3)所有‘0’到‘9’之外的字符都是非法的吗?加号和减号是合法输入。4) 考虑溢出#include using namespace std;bool g_value=false;int atoi(char * number){ if(number == NULL || *nu原创 2014-07-30 15:52:49 · 905 阅读 · 0 评论 -
重写String类
主要是4个默认函数的重写:代码:#include using namespace std;class Cstring{private : char * data;public : Cstring(const char * str =NULL); Cstring(const Cstring &another); ~Cstring(); Cstring & ope原创 2014-08-08 17:18:24 · 1359 阅读 · 1 评论 -
模板元的简单学习
特别值得注意的是,因为C++的模板语言是在编译器编译的时候完成的,所以又称为静态语言,通常的C++语言又称为动态语言或者运行时语言。正是因为模板语言是在编译期完成的,所以我们可以借助于这种编译期的计算实现代码自动生成的目的,从而实现C++自动化编程。编译期宏typedef影射static类型变量和函数const 类型变量=,:?,-运算符enum运行期对象使用函数调用变量赋值操作变量时&,原创 2014-08-07 09:45:15 · 1149 阅读 · 0 评论 -
求商求模运算
这两种运算总是感觉有点迷糊,现在 拨开乌云见天日。对于整型数a,b来说,取模运算或者求余运算的方法都是:1.求 整数商: c = a/b;2.计算模或者余数: r = a - c*b.#include using namespace std;void div(){ printf("5/3: %d",5/3);cout << endl; printf("原创 2014-08-03 17:40:59 · 2472 阅读 · 0 评论 -
内存中的数据对齐
数据对齐,是指数据所在的内存地址必须是该数据长度的整数倍。包含了两种相互独立又相互关联的部分:基本数据对齐和结构体数据对齐。 当结构体某一成员后面紧跟一个要求比较大的地址对齐成员时(例如char成员变量后面跟一个double成员变量),或是在,这时要插入一些没有实际意义的填充(Padding)。而且总的结构体大小必须为最大对齐的倍数。char(1字节),1字节对齐short(2原创 2014-03-20 16:15:42 · 1337 阅读 · 0 评论 -
C++ 之 拷贝构造函数(即复制构造函数)
主要探索浅拷贝和深拷贝:拷贝构造函数是一种特殊的构造函数,函数的名称必须和类名称一致,它的唯一的一个参数是本类型的一个引用变量。当出现类的等号赋值时,会调用拷贝函数在未定义显示拷贝构造函数的情况下,系统会调用默认的拷贝函数——即浅拷贝,它能够完成成员的一一复制。当数据成员中没有指针时,浅拷贝是可行的。但当数据成员中有指针时,如果采用简单的浅拷贝,则两类中的两个指针将指向同一个地原创 2013-12-13 13:57:29 · 1174 阅读 · 0 评论 -
C++ 之 strlen()和sizeof()比较
一、sizeof sizeof(...)是运算符,sizeof后如果是类型必须加括弧,如果是变量名可以不加括弧。在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。 具体而言,当参数分别如下时,sizeof返回的值表示的含义如下: 数组——编译时分配的数组空间大小; 指针——存储该指针所用的原创 2013-12-09 13:12:41 · 1218 阅读 · 0 评论 -
C++之I/O流
主要探索:1 标准I/O2 文件I/O3 窜I/O 对内存中指定空间进行输入输出4 命名空间首先标准I/O输出格式控制具体示例:#include #include //格式控制符在其中定义using namespace std;//通过控制符控制输出格式void control( int a){ cout<<"10进制"<<dec<<原创 2013-11-27 04:19:05 · 2434 阅读 · 0 评论 -
C++之多态和虚函数
多态是指具有不同功能的函数可以用同一个函数名。主要探索:1 虚函数(纯虚函数)2 虚基类3 抽象类4 虚析构函数虚函数: 用相同形式能同时调用派生类和基类一样函数。第一个实例,非虚函数,基类和派生类具有相同函数:#include #include using namespace std;//声明基类class student{pro原创 2013-11-25 18:23:07 · 1160 阅读 · 0 评论 -
C++ 友元
友元会将类的内部暴露给其他类或函数,破坏类的抽象性原则,只在有限情况下使用使用实例:#include #include using namespace std;//提前声明类class studentTwo;//可以当做一个普通类class studentOne{private: int _num; string _name;public: //构造函数原创 2013-11-20 10:09:12 · 1299 阅读 · 0 评论 -
C++ const 总结
主要探索台类中使用:包括const 对象,const数据成员,const成员函数,对象的常引用。首先是const对象:1 常对象必须有初值2 任何场所常对象所有成员值不能被改变3 不能调用该对象的非const型的成员函数,为了防止修改数据成员的值具体使用:#include #include using namespace std;class student原创 2013-11-22 19:38:19 · 1120 阅读 · 0 评论 -
C++ 内联函数
使用内臵函数可以节省运行时间,但却增加了目标程序的长度。 因此一般只将规模很小声明为内臵函数。不能使用复杂控制语句,如switch 和while循环具体实例:#include #include using namespace std;class Student{private: string _name; int _num;public : Student(strin原创 2013-11-19 22:44:29 · 1156 阅读 · 0 评论 -
C++静态成员函数和静态成员变量的探索
静态数据成员属于类,非属于类对象,所以,定义位置就有了限制。静态数据成员要实际地分配空间,故不能在类的声明中定义(只能声明数据成员)。类声明只声明一个类的“尺寸和规格”,并不进行实际的内存分配,所以在类声明中写成定义是错误的。它也不能在头文件中类声明的外部定义,因为那会造成在多个使用该类的源文件中,对其重复定义。静态成员函数只能调用静态成员,要调用非静态成员,只能通过类对象,但一般成员原创 2013-11-18 22:17:27 · 1019 阅读 · 0 评论 -
C++初始化列表探索
初始化列表完成数据成员赋值比构造函数内部赋值更高,而且有些数据类型必须在初始化列表中进行初始化如const数据成员,引用数据成员,没有默认构造函数的对象数组成员,没有默认构造函数的超类使用示例:#include #include using namespace std;class test{private : int mOne; double mTwo; string ms原创 2013-11-17 16:39:29 · 1053 阅读 · 0 评论 -
关于C++默认构造函数的定义和调用
主要介绍通过堆栈两种方式调用构造函数,什么情况下调用默认构造函数会造成错误声明栈对象时调用默认构造,成员对象值是不确定的,不会对成员进行处理,输出成员结果是不确定的:示例:#include using namespace std;class test{private : int mOne; double mTwo;public : void getOne(){ cout原创 2013-11-17 11:17:23 · 1846 阅读 · 0 评论