
C++
小_鱼
这个作者很懒,什么都没留下…
展开
-
const在函数前与函数后的区别
const 的一些强大的功能在于它在函数声明中的应用。在一个函数声明中,const 可以修饰函数的返回值,或某个参数;对于成员函数,还可以修饰是整个函数。有如下几种情况,以下会逐渐的说明用法: a &operator=(const a &a); void fun0(const a * a ); void fun1( )转载 2013-07-14 23:56:11 · 523 阅读 · 0 评论 -
标准C++中string类及STL容器类简介
一.标准C++库字符串类std::string的用法#includestd::string s1;std::string s3(s2);std::string s2("this is a string");begin 得到指向字符串开头的Iteratorend 得到指向字符串结尾的Iteratorrbegin 得到指向反向字符串开头的Iteratorrend 得到指转载 2013-09-19 23:13:55 · 615 阅读 · 0 评论 -
C++中的STL容器简介
STL -- Standard Template Library 标准模板库。 容器的概念 所谓STL容器,即是将最常运用的一些数据结构(data structures)实现出来。容器是指容纳特定类型对象的集合。根据数据在容器中排列的特性,容器可概分为序列式(sequence)和关联式(associative)两种。迭代器是一种检查容器内元素并转载 2013-09-19 23:15:59 · 859 阅读 · 0 评论 -
构造函数 复制构造函数
本文是学习 C++中的最基本的内容,因此学习 C++就应全部掌握本文的内容.在知道了怎样声明一个类之后,就会遇到关于构造函数的问题,本文是关于构造函数的专题,集中介绍了默认构造函数,初始化列表,重点介绍了复制构造函数, 直接初始化,复制初始化,赋值,临时对象之间的关系.构造函数和析构函数一:基础1.构造函数是用来保证初始化类中的成员变量的初值的,以保证每个对转载 2013-09-19 23:58:35 · 781 阅读 · 0 评论 -
New/delete malloc/free
相同点:都可用于申请动态内存和释放内存不同点:(1)操作对象有所不同。malloc与free是C++/C 语言的标准库函数,new/delete 是C++的运算符。对于非内部数据类的对象而言,光用maloc/free 无法满足动态对象的要求。对象在创建的同时要自动执行构造函数, 对象消亡之前要自动执行析构函数。由于malloc/free 是库函数而不是运算符,不在编译器控制权限之内转载 2013-09-20 00:09:03 · 587 阅读 · 0 评论 -
C++ 虚函数表解析
前言虚函数表一般继承无虚函数覆盖一般继承有虚函数覆盖多重继承无虚函数覆盖多重继承有虚函数覆盖安全性结束语附录一VC中查看虚函数表附录二例程C++ 虚函数表解析陈皓http://blog.youkuaiyun.com/haoel前言C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类转载 2013-10-31 13:47:02 · 449 阅读 · 0 评论 -
C++虚函数原理
虚函数是在类中被声明为virtual的成员函数,当编译器看到通过指针或引用调用此类函数时,对其执行晚绑定,即通过指针(或引用)指向的类的类型信息来决定该函数是哪个类的。通常此类指针或引用都声明为基类的,它可以指向基类或派生类的对象。多态指同一个方法根据其所属的不同对象可以有不同的行为(根据自己理解,不知这么说是否严谨)。举个例子说明虚函数、多态、早绑定和晚绑定: 李氏两兄妹(哥哥转载 2013-10-31 13:51:13 · 486 阅读 · 0 评论 -
对象析构谈—— delete this 的使用及注意事项
In order to understand "delete this" :First Step - dive into "delete p"delete p 执行了哪些步骤?delete p 是一个两步的过程:调用析构函数,然后释放内存。delete p产生的代码看上去是这样的(假设是Object*类型的):delete原语可以看作如下这样一个过程:p->~Obj转载 2013-11-19 22:39:58 · 693 阅读 · 0 评论 -
C++初始化与赋值 区别
先来个区别说明:赋值操作是在两个已经存在的对象间进行的,而初始化是要创建一个新的对象,并且其初值来源于另一个已存在的对象。编译器会区别这两种情 况,赋值的时候调用重载的赋值运算符,初始化的时候调用拷贝构造函数。如果类中没有拷贝构造函数,则编译器会提供一个默认的。这个默认的拷贝构造函数只是 简单地复制类中的每个成员。 下面看例子。 c++中初始化和赋值操作差别是很大的。 对于基本数转载 2013-12-04 19:02:48 · 1049 阅读 · 0 评论 -
#ifdef _cpluscplus
看一些程序的时候老是有“#ifdef __cplusplusextern "C" {#endif”的定义,搞搞清楚是怎么回事:Microsoft-Specific Predefined Macros__cplusplus Defined for C++ programs only. 意思是说,如果是C++程序,就使用extern "C"{而这个东东,转载 2014-04-13 13:58:37 · 2574 阅读 · 0 评论 -
C++值传递,指针传递,引用传递
值传递:形参是实参的拷贝,改变形参的值并不会影响外部实参的值。从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入,不能传出。当函数内部需要修改参数,并且不希望这个改变影响调用者时,采用值传递。指针传递:形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作引用传递:形参相当于是实参的“别名”,对形参的操作其转载 2014-06-10 22:24:07 · 420 阅读 · 0 评论 -
C++数据类型——向量Vector
向量(Vectors) 1.基本操作 vector是向量类型,她是一种对象实体,具有值,所以可以看作是变量。她可以容纳许多其他类型的相同实体,如若干个整数,所以称其为容器。Vector是C++STL(标准模板类库)的重要一员,使用她时,只要包括头文件#include即可。 vector可以有四种定义方式: vector是模板形式,尖括号中为元素类型转载 2013-09-19 23:13:00 · 1615 阅读 · 0 评论 -
C++ iterator迭代器简介
除了使用下标来访问vector对象的元素外,标准库还提供了另一种检测元素的方法:使用迭代器(iterator)。迭代器是一种允许程序员检查容器内元素,并实现元素遍历的数据类型。 标准库为每一种标准容器(包括vector)定义了一种迭代器类型。迭代器类型提供了比下标操作更一般化的方法:所有的标准库容器都定义了相应的迭代器类型,而只有少数的容器支持下标操作。因为迭代器对所有的容器都适用,现代C+转载 2013-09-19 23:10:44 · 1072 阅读 · 0 评论 -
vector::clear
#include void clear();函数clear()删除储存在vector中的所有元素. 如果vector的元素是一些object, 则它将为当前储存的每个元素调用它们各自的析构函数(destructor). 然而, 如果vector储存的是指向对象的指针, 此函数并不会调用到对应的析构函数. 在第二种情况下, 为了完全删除vector中的元素则应使用一个类似于下的循环:转载 2013-09-19 23:09:29 · 672 阅读 · 0 评论 -
初识MFC ---对话框
CPropertySheet 属性表单AddPage(&m_page1)//增加一个属性页到属性表单 m_page1为CPropertyPage类型CPropSheet propSheet("属性表单") //定义改对象时必须带参数propSheet.SetWizardMode(); //设置为向导式属性页,否则所有属性页在一个属性表单中propS原创 2013-07-27 00:04:30 · 551 阅读 · 0 评论 -
构造函数私有化
通常我们都将构造函数的声明置于public区段,假如我们将其放入private区段中会发生什么样的后果?没错,我也知道这将会使构造函数成为私有的,这意味着什么? 我们知道,当我们在程序中声明一个对象时,编译器为调用构造函数(如果有的话),而这个调用将通常是外部的,也就是说它不属于class对象本身的调用,假如构造函数是私有的,由于转载 2013-08-31 15:23:56 · 995 阅读 · 0 评论 -
内联函数(1)
内联函数是指在调用函数的地方插入函数实现代码,节省函数调用的开销。这是一种用空间换时间的做法。声明内联函数时用inline关键字。 在类体内定义的函数默认为内联函数(构造函数也可以为内联函数)要注意,无法获得内联函数的地址。内联函数,构造函数,静态成员函数不能为virtual函数1> 内联函数内联函数是在编译时期展开,而虚函数的特性是运行时才动态联编,所以两者矛盾,不能定义内原创 2013-08-31 10:33:54 · 532 阅读 · 0 评论 -
内联函数 和 宏定义 区别
用内联取代宏:1.内联函数在运行时可调试,而宏定义不可以;2.编译器会对内联函数的参数类型做安全检查或自动类型转换(同普通函数),而宏定义则不会; 3.内联函数可以访问类的成员变量,宏定义则不能; 4.在类中声明同时定义的成员函数,自动转化为内联函数。文章(一)内联函数与宏定义 在C中,常用预处理语句#define来代替一个函数定义。例如: #d转载 2013-08-31 10:59:14 · 545 阅读 · 0 评论 -
《C++程序设计》笔记之-基于对象程序设计
面向对象:除主函数被操作系统调用外,其它函数可以相互调用,面向一个个函数。 程序 = 数据结构 + 算法基于对象:以类为基本单位构成的程序面向对象:抽象、封装、继承、多态 对象 = 数据结构 + 算法 程序 = (对象 + 对象 + 。。。)+消息 如果类中定义既不指定private,也不指定public,默认为private原创 2013-09-07 00:12:28 · 640 阅读 · 0 评论 -
指针与引用(二)
引用必须初始化,而指针不需要 二、引用1.引用即别名int a = 10;int& r = a; // r是a的一个别名r = 20;cout const int a = 1; int &b = a; // error,a不能为const, 但引用b可以为const2.引用必须初始化int& r; // ERROR原创 2013-09-07 00:08:02 · 434 阅读 · 0 评论 -
《C++程序设计》笔记之-运算符重载
运算符重载实际上是函数的重载函数类型 operate 运算符名称 (形参表)Complex operate + (Complex &c2) 不能重载的运算符5个: sizeof 、 .(成员访问运算符)、 *(成员指针访问运算符)、 ::域运算符、 ?:条件运算符1、重载不能改变操作对象个原创 2013-07-06 16:54:59 · 680 阅读 · 0 评论 -
《唐老师C++》C++到C得升华
C++中的bool可取的值只有true(1)和false(0) 理论上bool只占用一个字节,• 如果多个bool变量连续定义在一起,可能会各占一个bit,这取决于编译器的实现1、b = 1 sizeof(b) = 12、a = 1 b = 13、a = 1 b = 14、 a= 10 b = 15、b = 0原创 2013-09-07 22:29:48 · 1381 阅读 · 0 评论 -
《唐老师C++》之const引用
const int a = 1;int *p = (int *)&a;*p = 5;printf("%d",a) //输出1 但a所指内存被修改为5 a为真正意义上的常量,在编译期间已经在符号表中被替换为1,可执行程序不知道符号表的存在,无论怎样用指针修改a的内存,a始终为1若改为:const int &a = 1; 打印出a=5,a为只读变量原创 2013-09-07 22:17:18 · 662 阅读 · 0 评论 -
析构函数中异常处理
析构函数在什么时候被调用执行?先看一个简单的示例吧!如下:class MyTest_Base{ public:virtual ~ MyTest_Base (){ cout 销毁一个MyTest_Base类型的对象"<< endl;}};void main(){try{ // 构造一个对象,当obj对象离开这个作用域转载 2013-09-19 22:59:44 · 670 阅读 · 0 评论 -
operator->重载问题总结(转)
operator->重载问题总结 编写程序的时候,想让一个对象表现的像一个指针,因此需要重载->运算符。因此写下了如下的代码。由于全部贴出程序比较多,用简化的代码说明一下:class A{ public: int i; A(){i = 100;} void print(int a){printf("%d/n", a);} A& o转载 2014-10-18 21:40:40 · 671 阅读 · 0 评论