06 2016 档案

摘要:什么是运算符重载? 运算符重载就是把标准运算符(例如=,-,+,>等)应用于我们自己定义的数据类型的对象。其实重载本身的含义就是一次多意。函数重载就是一个函数名有多种不同的含义。 运算符重载的好处是直观自然,可以提高程序的可读性 体现了C++的可扩充性 运算符重载仅仅只是语法上的方便,它是另一种函数 阅读全文
posted @ 2016-06-28 16:37 阿瞒123 阅读(227) 评论(0) 推荐(0) 编辑
摘要:什么是友元? 在类中,一般数据成员为类的私有成员,而类的私有成员只能被类的成员函数所访问,例如类A中有一个成员变量x,那么类B中的成员函数不能访问类A中的x。全局函数也是没办法直接访问类A中的x。而友元给我们提供了一个种方法,可以用不属于A的成员函数来直接访问类A中的x。 友元可以是(1)全局函数, 阅读全文
posted @ 2016-06-28 13:30 阿瞒123 阅读(183) 评论(0) 推荐(0) 编辑
摘要:在c++中,可以声明一个静态的成员对象,但是此时仅仅声明,没有定义,也不会创建这个内部的静态成员对象。只有在类体外部定以后才能创建这个对象。 上述代码中,我们并没有对成员对象进行定义,仅仅是引用性声明,此时并不会为其分配空间。运行结果如下 我们看到运行结果展示,inner的构造函数与析构函数都没有被 阅读全文
posted @ 2016-06-27 22:19 阿瞒123 阅读(802) 评论(0) 推荐(0) 编辑
摘要:我们知道当调用默认拷贝构造函数时,一个对象对另一个对象初始化时,这时的赋值时逐成员赋值。这就是浅拷贝,当成员变量有指针时,浅拷贝就会在析构函数那里出现问题。例如下面的例子: 所以此时默认拷贝构造函数就出现问题,此时应该提供自己的拷贝构造函数,来实施深拷贝。 在类里面添加拷贝构造函数 此时运行结果就是 阅读全文
posted @ 2016-06-27 16:18 阿瞒123 阅读(163) 评论(0) 推荐(0) 编辑
摘要:拷贝构造函数:拷贝构造函数就是在用一个类对象来创建另外一个类对象时被调用的构造函数,如果我们没有显示的提供拷贝构造函数,编译器会隐式的提供一个默认拷贝构造函数。 拷贝构造函数的定义是X(const X& ){} 记住拷贝构造函数的只有一个参数,并且这个参数是类类型的const引用,参数不能是普通的值 阅读全文
posted @ 2016-06-27 11:12 阿瞒123 阅读(297) 评论(0) 推荐(0) 编辑
摘要:(1)构造函数初始化列表: 构造函数的执行分为两个阶段:(1)初始化阶段 (2)普通计算阶段 初始化是我们定义一个变量,分配内存时直接给变量赋值,例如 int i=10; 而int k; k=10;这样的就不是初始化,是赋值。所以在初始化列表里面的初始化才是真正的初始化,即初始化阶段。而在构造函数内 阅读全文
posted @ 2016-06-25 17:32 阿瞒123 阅读(392) 评论(0) 推荐(0) 编辑
摘要:构造函数定义:构造函数c++中在创建对象时自动调用,用来初始化对象的特殊函数。 (1)构造函数的名字必须与类的名字相同,不能有返回值,哪怕是void 也不行。 (2)通常情况下构造函数应声明为公有函数,否则它不能像其他成员函数那样被显式地调用 构造函数被声明为私有有特殊的用途,这个以后再写。 (3) 阅读全文
posted @ 2016-06-25 15:54 阿瞒123 阅读(535) 评论(0) 推荐(0) 编辑
摘要:(1)转换构造函数 转换构造函数的定义:转换构造函数就是把普通的内置类型转换成类类型的构造函数,这种构造函数只有一个参数。只含有一个参数的构造函数,可以作为两种构造函数,一种是普通构造函数用于初始化对象,一种是转换构造函数 在上面的t=15这段代码中,会生成临时对象,那么临时对象是什么时候释放的呢? 阅读全文
posted @ 2016-06-25 15:53 阿瞒123 阅读(234) 评论(0) 推荐(0) 编辑
摘要:和静态数据成员一样,静态成员函数是所有对象共享的,不是单独属于某一个对象,由于静态成员函数没有传递this指针,故static member function 只能访问static成员,不能访问非static 成员。但是非static却可以访问static 成员。 对象在访问静态成员时,可以通过点运 阅读全文
posted @ 2016-06-23 19:50 阿瞒123 阅读(1681) 评论(0) 推荐(0) 编辑
摘要:有时需要为某个类的所有对象分配一个单一的存储空间,这个存储空间只是被这个类的对象访问,其他人不能访问,那么这时静态的成员变量是有用的。例如下面用来统计一共创建了多少个对象的变量num 在类内部,static int num;算是静态成员变得声明,而其定义时在int object::num=0;处。如 阅读全文
posted @ 2016-06-23 15:19 阿瞒123 阅读(510) 评论(0) 推荐(0) 编辑
摘要:使用指令是把名字空间中的所有名字引入到当前作用域,而使用声明是把名字空间的某个名字引入到当前作用域中 语法如下 阅读全文
posted @ 2016-06-23 14:29 阿瞒123 阅读(2671) 评论(0) 推荐(0) 编辑
摘要:名字空间是用来划分冲突域的,把全局名字空间划分成几个小的名字空间。全局函数,全局变量,以及类的名字是在同一个全局名字空间中,有时为了防止命名冲突,会把这些名字放到不同的名字空间中去。 首先我们看一下名字空间的定义: 上述代码有一个特别需要注意的地方就是,在MyLib.h文件中,如果使用声明,无论函数 阅读全文
posted @ 2016-06-23 14:07 阿瞒123 阅读(5081) 评论(0) 推荐(0) 编辑
摘要:在文件作用域(file scope)内所有的名字,如果没有static修饰且不是类或者函数内部的名字,这些名字对程序中所有的翻译单元都是可见的,这就是所谓的外部链接(external linkage)。普通的函数或者全局变量都是外部链接。 在文件作用域,一个被生命为static的对象或者函数的名字对 阅读全文
posted @ 2016-06-22 19:57 阿瞒123 阅读(220) 评论(0) 推荐(0) 编辑
摘要:(1)static关键在普通变量中的应用,static在普通变量中,有两个作用: 第一个是限制全局变量以及函数的作用域(可见性),在全局作用域内定义的变量和函数前加static关键字修饰,那么变量和函数就只能在当前编译单元可见,别的编译单元不能再访问这些函数和变量 第二个作用是延长局部变量的生命周期 阅读全文
posted @ 2016-06-22 11:46 阿瞒123 阅读(224) 评论(0) 推荐(0) 编辑
摘要:我们几乎总是希望用内联函数代替预处理器宏,但是有三个地方比较式适合使用预处理宏 (1)字符串定义 (2)字符串拼接 (3)标志粘贴 字符串拼接:#define DEBUG(X) cout<<#x"="<<x<<endl;//在这里字符串x和字符串=拼接在一起 上面的覅难以可以打印任何变量的值 标志粘 阅读全文
posted @ 2016-06-21 18:01 阿瞒123 阅读(156) 评论(0) 推荐(0) 编辑
摘要:《thinking in C++》page210 在c++中,宏的概念是作为内联函数(inline function)来实现的,而内联函数无论从那一个方面上说都是真正的函数,编译器会检测内联函数的参数类型,返回值等。唯一不同于普通函数的地方就是在适当的地方像宏一样展开。所以不需要调用开销(参数压栈, 阅读全文
posted @ 2016-06-21 16:37 阿瞒123 阅读(171) 评论(0) 推荐(0) 编辑
摘要:(1)我们知道函数的重载时根据函数的参数类型以及函数参数个数来重载的,不能用函数返回值来重载函数。但是有时候函数参数个数和函数参数类型重载函数会和默认参数发生冲突: (2)在类的成员函数里面,const成员函数和非const成员函数可以出现重载,这是因为在成员函数中,const是用来修饰const成 阅读全文
posted @ 2016-06-21 12:18 阿瞒123 阅读(240) 评论(0) 推荐(0) 编辑
摘要:我们知道类里面的const的成员函数一般是不允许改变类对象的,但是我们知道const 类型的指针是可以强制类型转出成非const指针的,同样的道理,this指针也可以被强制类型转换 虽然上述用法可以实现const成员函数改变const对象,但是这种用法是客户端程序员是非常不友好的,因为客户端程序员不 阅读全文
posted @ 2016-06-19 16:54 阿瞒123 阅读(453) 评论(0) 推荐(0) 编辑
摘要:2 IntelliSense: 没有与这些操作数匹配的 "<<" 运算符 操作数类型为: std::ostream << const std::string d:\programmer practice\thinking in c++\08\ConstInClass\ConstInClass\con 阅读全文
posted @ 2016-06-19 16:17 阿瞒123 阅读(430) 评论(0) 推荐(0) 编辑
摘要:在c++中,类里面的成员变量不仅仅可以被const修饰,还可以被static const修饰,此时一个内建类型(如int ,char ,long等)的static const 可以看做是一个编译期间的常量,可以被用作数组下标 例如: 《thinking in c++》中page198:必须在stat 阅读全文
posted @ 2016-06-19 15:36 阿瞒123 阅读(1359) 评论(0) 推荐(0) 编辑
摘要:类里面的成员变量可以用const修饰,在只用const不用static修饰的情况下,这种使用的限制比较多 (1)不能定义处初始化,必须在类的构造函数初始化列表里面初始化(虽然在vs中,可以在定义处初始化,但是这是不符合语法的,如果用g++编译器,就会出现明显的报错,不利于程序的移植) (2)cons 阅读全文
posted @ 2016-06-16 18:21 阿瞒123 阅读(187) 评论(0) 推荐(0) 编辑
摘要:如果返回值类型是reference 或者pointer,那么这是一定要是注意,函数调用完后,被返回的变量要仍然存在,不能被编译器撤销。 无论是fun1还是fun2中,返回的变量都是一个局部变量,也没有用static修饰,所以当fun1与fun2调用完成后,被返回的变量i就会被编译器撤销,也就是不再存 阅读全文
posted @ 2016-06-13 21:40 阿瞒123 阅读(1112) 评论(0) 推荐(0) 编辑
摘要:1对内建类型来说,按值返回的是否为const,是无关紧要的,因为编译器已经不让它成为一个坐直,因为它总是一个值,而不是一个变量(thing in c++ page192) 2当处理用户自定义的类型时,按值返回常量是非常重要的,如果一个函数按值返回一个类对象为const时,那么这个返回值不能是一个左值 阅读全文
posted @ 2016-06-13 17:26 阿瞒123 阅读(255) 评论(0) 推荐(0) 编辑
摘要:如果包含上述语句,在编译时会出现警告,警告信息如下 虽然上述代码可以编译通过,我们也可以无视警告,但是如果有一行带入如下,就出在运行时出现段错误 如果代码改成如下代码就ok了 char cp[]="hello"; 这行代码,是先创建一个字符数组,然后把字面值拷贝到字符数组,此时是可以随便修改字符数组 阅读全文
posted @ 2016-06-10 17:46 阿瞒123 阅读(272) 评论(0) 推荐(0) 编辑
摘要:在c语言程序设计时,预处理器可以不受限制地建立宏并用它来替代值。因为预处理器只做一些文本替换,宏没有类型检测概念,也没有类型检测功能。所以预处理器的值替换会出现一些小的问题,出现的这些问题,在c++中是通过const值来避免。 #define BUFSIZE 100 BUFSIZE是一个名字,并且它 阅读全文
posted @ 2016-06-10 16:48 阿瞒123 阅读(303) 评论(0) 推荐(0) 编辑
摘要:在c语言中,大家都学习过结构体struct,那么我们来看以下c语言下的一个struct例子 上面的是一个结构体,和操作结构体上数据的一些函数的声明,我们特别注意的是这些函数的第一个参数,都是一个CStash *类型。 上面的代码是CLib.h声明函数的实现 上面的代码是一个创建了两个CStash类型 阅读全文
posted @ 2016-06-03 22:51 阿瞒123 阅读(721) 评论(0) 推荐(0) 编辑
摘要:在c++中,我们可以用const来定义一个const对象,const对象是不可以调用类中的非const成员函数,这是为什么呢?下面是我总结的一些原理。 假设有一个类,名字为test代码如下: 我们知道c++在类的成员函数中还会隐式传入一个指向当前对象的this指针,所以在test类中,实际的prin 阅读全文
posted @ 2016-06-02 17:40 阿瞒123 阅读(9491) 评论(0) 推荐(2) 编辑
摘要:在嵌套类中,内部类可以直接访问外部类的私有成员变量,但是外部类不能直接访问内部类的私有成员变量,必须把外部类声明为内部类的友元类 阅读全文
posted @ 2016-06-01 22:15 阿瞒123 阅读(2474) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示