文章分类 -  C++

摘要:按照默认规定,只有一个参数的构造函数也定义了一个隐式转换,将该构造函数对应数据类型的数据转换为该类对象,如下面所示: class String { String ( const char* p ); // 用C风格的字符串p作为初始化值 //… } String s1 = “hello”; //OK 阅读全文
posted @ 2016-12-12 17:15 叫我二当家 阅读(162) 评论(0) 推荐(0)
摘要:1、什么是虚函数?什么是纯虚函数? 答:虚函数声明如下: virtual ReturnType FunctionName(Parameter);引入虚函数是为了动态绑定。纯虚函数声明如下:virtual ReturnType FunctionName()= 0;引入纯虚函数是为了派生接口。 2、基类 阅读全文
posted @ 2016-12-12 17:14 叫我二当家 阅读(266) 评论(0) 推荐(0)
摘要:1.c++的类如果没有构造函数,系统会默认生成,如果定义了任何一个构造函数则不会再生成任何构造函数了。 2.c++派生类的构造函数 前面我们说基类的成员函数可以被继承,可以通过派生类的对象访问,但这仅仅指的是普通的成员函数,类的构造函数不能被继承。构造函数不能被继承是有道理的,因为即使继承了,它的名 阅读全文
posted @ 2016-12-12 15:18 叫我二当家 阅读(307) 评论(0) 推荐(0)
摘要:参考:http://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header-file 在 C++ 中定义普通的类的时候,比较清晰和普遍的做法是在 .h 文件中声明类的接口,如果有 i 阅读全文
posted @ 2016-12-07 17:46 叫我二当家 阅读(1617) 评论(0) 推荐(0)
摘要:大多数C++ 程序员都知道不要把auto_ptr 对象作为STL容器元素来使用。但是很少有人知道到底是为什么。C++标准如是说:“STL元素必须具备拷贝构造和可赋值……”,其意思是说对象可以进行安全的赋值操作,可以将一个对象拷贝到另一个对象,从而获得两个独立的,逻辑上相同的拷贝。尤其是当一个对象被拷 阅读全文
posted @ 2016-12-07 15:34 叫我二当家 阅读(426) 评论(0) 推荐(0)
摘要:声明一个类型 typename的第一个作用在于声明一个类型。为什么类型还需要声明呢?因为编译器并不是总会知道哪个名称是个类型。 下面的代码会编译错: template<typename C> void print2nd(const C& container){ if(container.size() 阅读全文
posted @ 2016-12-07 15:28 叫我二当家 阅读(2410) 评论(0) 推荐(0)
摘要:1.单例模式 class TestClass{ private: //构造函数和析构函数定义为private,可以防止直接生成 TestClass(){ InitMethod(); } ~TestClass(){ cout<<"~TestClass"<<endl; } //拷贝函数和复制函数只声明不 阅读全文
posted @ 2016-11-10 18:41 叫我二当家 阅读(100) 评论(0) 推荐(0)
摘要:用转换构造函数可以将一个指定类型的数据转换为类的对象。但是不能反过来将一个类的对象转换为一个其他类型的数据(例如将一个Complex类对象转换成double类型数据)。C++提供类型转换函数(type conversion function)来解决这个问题。类型转换函数的作用是将一个类的对象转换成另 阅读全文
posted @ 2016-08-31 20:23 叫我二当家 阅读(3717) 评论(0) 推荐(1)
摘要:C++ 资源大全 关于 C++ 框架、库和资源的一些汇总列表,内容包括:标准库、Web应用框架、人工智能、数据库、图片处理、机器学习、日志、代码分析等。 标准库 C++标准库,包括了STL容器,算法和函数等。 C++ Standard Library:是一系列类和函数的集合,使用核心语言编写,也是C 阅读全文
posted @ 2016-08-30 12:34 叫我二当家 阅读(163) 评论(0) 推荐(0)
摘要:1.先看下面两段代码的运行结果 (1) (2) 二、原理分析 1、示例一分析: 起初C++没有自己的编译器,它是使用C语言编译器进行编译的。所以,在实现C++的类的时候,采用的是结构体来实现的。而实现成员函数和类的关系的时候,是靠着this指针来调用成员函数的。具体来说,就是在其成员函数的第一个默认 阅读全文
posted @ 2016-08-29 10:44 叫我二当家 阅读(95) 评论(0) 推荐(0)
摘要:错误类型 具体表现 备注(案例) 声明错误 变量未声明 编译时错误 初始化错误 未初始化或初始化错误 运行不正确 访问错误 1、 数组索引访问越界 2、 指针对象访问越界 3、 访问空指针对象 4、 访问无效指针对象 5、 迭代器访问越界 内存泄漏 1、 内存未释放 2、 内存局部释放 参数错误 本 阅读全文
posted @ 2016-08-26 10:38 叫我二当家 阅读(233) 评论(0) 推荐(0)
摘要:一、snprntf的困惑 有经验的程序员会拒绝使用sprintf。凭着对输出buffer长度的严格检查,snprintf得到了众多程序员的青睐。但使用了snprintf就万事无忧了么,下面举例说明一个比较容易忽略的细节: 假设该场景中以字符串进行协议交换,也不必关心write能否成功写入,仅把关注重 阅读全文
posted @ 2016-08-26 10:28 叫我二当家 阅读(305) 评论(0) 推荐(0)
摘要:每个类只有一个析构函数和一个赋值函数,但可以有多个构造函数(包含一个拷贝构造函数,其它的称为普通构造函数)。对于任意一个类A,如果不编写上述函数,C++编译器将自动为A 产生四个缺省的函数,例如: A(void);//缺省的无参数构造函数 A(const A&a);//缺省的拷贝构造函数 ~A(); 阅读全文
posted @ 2016-08-25 23:09 叫我二当家 阅读(415) 评论(0) 推荐(0)
摘要:【目录】 引言 static_cast 定义 dynamic_cast 定义 举例:下行转换(把基类的指针或引用转换成子类表示) 举例:上行转换(把子类的指针或引用转换成基类表示) 举例: static_cast 用于基本类型之间、基本类型指针和空指针间的转换 reinterpret_cast 定义 阅读全文
posted @ 2016-08-25 18:44 叫我二当家 阅读(147) 评论(0) 推荐(0)
摘要:阅读目录 0.前言 1.何为C++对象模型? 2.文章内容简介 3.理解虚函数表 3.1.多态与虚表 3.2.使用指针访问虚表 4.对象模型概述 4.1.简单对象模型 4.2.表格驱动模型 4.3.非继承下的C++对象模型 5.继承下的C++对象模型 5.1.单继承 5.2.多继承 6.虚继承 6. 阅读全文
posted @ 2016-08-25 18:35 叫我二当家 阅读(188) 评论(0) 推荐(0)
摘要:深入理解C++中的异常处理机制 异常处理 增强错误恢复能力是提高代码健壮性的最有力的途径之一,C语言中采用的错误处理方法被认为是紧耦合的,函数的使用者必须在非常靠近函数调用的地方编写错误处理代码,这样会使得其变得笨拙和难以使用。C++中引入了异常处理机制,这是C++的主要特征之一,是考虑问题和处理错 阅读全文
posted @ 2016-08-25 14:27 叫我二当家 阅读(514) 评论(0) 推荐(0)
摘要:C++著名程序库的比较和学习经验(转自校内,了解一些基础的还是很有必要) 1、C++各大有名库的介绍——C++标准库 2、C++各大有名库的介绍——准标准库Boost 3、C++各大有名库的介绍——GUI 4、C++各大有名库的介绍——网络通信 5、C++各大有名库的介绍——XML 6、C++各大有 阅读全文
posted @ 2016-08-25 11:44 叫我二当家 阅读(323) 评论(0) 推荐(0)
摘要:const修饰普通变量和指针 const修饰变量,一般有两种写法: const TYPE value; TYPE const value; 这两种写法在本质上是一样的。它的含义是:const修饰的类型为TYPE的变量value是不可变的。对于一个非指针的类型TYPE,无论怎么写,都是一个含义,即va 阅读全文
posted @ 2016-07-21 16:26 叫我二当家 阅读(107) 评论(0) 推荐(0)
摘要:前言 在写C++设计模式——单例模式的时候,在写到实例销毁时,设计的GC类是很巧妙的,而这一巧妙的设计就是根据当对象的生命周期结束时会自动调用其析构函数的,而这一巧妙的设计也是有专业的名词的——RAII。那以下将围绕RAII,全面的讲解RAII的相关知识。 什么是RAII? RAII是Resourc 阅读全文
posted @ 2016-07-13 18:50 叫我二当家 阅读(145) 评论(0) 推荐(0)
摘要:如果命令行的第一个或前两个字符是 @ (at 符号)、-(连字符)和 +(加号)这几个符号之一或全部,那么将特别处理该命令,如下: 所以,简单的说就是: 【make中命令行前面加上减号】 就是,忽略当前此行命令执行时候所遇到的错误。 而如果不忽略,make在执行命令的时候,如果遇到error,会退出 阅读全文
posted @ 2016-07-12 11:59 叫我二当家 阅读(341) 评论(0) 推荐(0)