随笔分类 - C++学习
摘要:在一个类中 ,如果程序员没有写,任何一个构造函数,则编译器将为该类提供一个默认的构造函数,如果程序员对类的构造函数进行了重载,则编译器将不提供默构造函数,这里需要手动书写一个无参的构造函数, 无参的构造函数,也就是默认构造函数, 默认构造函数分为两种: 1、不含有参数的默认构造函数 2、带有默认参数
阅读全文
posted @ 2017-09-15 09:21
etcjd
摘要:和c++内存布局有关,为了节约内存和提高调用效率,一般类成员的存储分成两块,一块是单个instance所有,比如非静态成员变量,另一块是所有instances共享的,比如函数代码。这样的布局是对于性能有好处的,代码只要load一次,减少了cache占用和miss。如果你的函数不引用任何instanc
阅读全文
posted @ 2017-01-12 22:02
etcjd
摘要:1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 也就是说extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a
阅读全文
posted @ 2016-12-20 17:06
etcjd
摘要:异常使用 1.框定异常(try语句块):在祖先函数处,框定可能产生错误的语句序列。它是异常的根据。若不框定异常,则没有异常这回事。 2.定义异常处理语句(catch语句):将出现异常后的处理过程放在catch块中,以便当异常被抛出,因类型匹配而捕捉时,就处理之。 3.抛掷异常(throw语句):在可
阅读全文
posted @ 2016-12-14 15:34
etcjd
摘要:函数模板 template <类型参数表> //每个模板形参都必须加上前缀typename 返回类型 函数模板名(数据参数表) { 函数模板定义体 } 函数模板不是函数,它是以具体的类型为实参来生成函数体的模板。函数模板定义被编译时,不会产生任何执行代码。 2. 函数模板用法: 使用函数模板,就是以
阅读全文
posted @ 2016-12-13 11:08
etcjd
摘要:面向对象编程三个基本特征: 1. 封装 2. 继承 3. 多态 一个操作随着所传递或捆绑的对象类型的不同能够做出不同的反应,其行为模式称为多态。(一般地,一个容器,其元素是基类对象的指针或引用,才有多态可言) 虚函数(采用虚函数会影响一些程序的效率) 1. 多态条件:仅仅对于对象的指针和引用的间接访
阅读全文
posted @ 2016-12-07 17:16
etcjd
摘要:公有(public)、私有(private)、保护(protected)继承 为了便于大家记忆,我给访问权限的大小定义:public > protected > private > no access(no access就是即使是该类内部的成员函数都无法访问),基于这个定义给出我总结的一个小诀窍,就
阅读全文
posted @ 2016-12-06 10:54
etcjd
摘要:构造函数 在C++中,对象的实例在编译的时候,就需要为其分配内存大小,因此,系统都是在stack上为其分配内存的。这一点和C#完全不同!千万记住:在C#中,所有类都是reference type,要创建类的实体,必须通过new在heap上为其分配空间,同时返回在stack上指向其地址的referen
阅读全文
posted @ 2016-12-05 10:23
etcjd
摘要:类 类定义 注意:只要是在类定义中包含的函数,就有默认声明内敛的性质,也就说该函数处于被编译自动安排到最佳运行性能的状态。因此,为了获取最佳性能,就应该在类编程时尽量把函数写入类定义中,使之称为成员函数。但编译是否真的将成员函数安排为内敛,还要看函数是否足够简单,是否包含不适于内敛运行的循环结构。所
阅读全文
posted @ 2016-11-28 15:12
etcjd
摘要:程序结构 头文件 头文件可以包括的内容: 头文件不能包括的内容: 全局数据 全局数据区的整个区域在程序启动时,初始化为0。全局数据像函数一样可以多次声明,但只能定义一次。全局数据的声明形式是在全局数据定义形式前加关键字extern。 注意:如果全局数据声明写成初始化形式,那就变成了定义。 即对于:
阅读全文
posted @ 2016-11-28 12:45
etcjd
摘要:2. 性能 内联函数 在C++中,函数调用需要建立栈环境,进行参数复制,保护调用现场,返回时,还要进行返回值复制,恢复调用现场。这些工作都是与完成特地任务的操作无关的额外开销。 程序效率由于该项工作而受到影响,如果频繁调用很少语句的小函数,则这些开销相对来说占的比重就大了。我们既要用函数调用来体现其
阅读全文
posted @ 2016-11-27 20:34
etcjd
摘要:基于函数的程序设计就称为基于过程的程序设计 1.函数机制 栈机制: 一个程序要运行,就要先将可执行程序文件装载到计算机的内存中。装载是操作系统掌控的,一般而言,操作系统将程序装入到内存后,将形成一个随时可以运行的进程空间。 一个运行的程序在内存中表示为四个空间区域: 代码区:存放程序的执行代码。所谓
阅读全文
posted @ 2016-11-27 17:52
etcjd
摘要:#include #include using namespace std; int main(){ long double d=12345.67891023456; cout=0;--i){ char c=p[i]; //一个字节是8位,所以j从7到0 for(int j=7;j>=0;--j) cout>j&1); cout<<(i%5==0?"\n":","); } return 0; ...
阅读全文
posted @ 2016-11-25 16:11
etcjd
摘要:1. 算术运算问题 中间结果溢出: 输出结果: 1410065 (因为a*b = 1*1010 > 232=4294967296,所以a*b = 1*1010 % 4294967296 = 1410065408,所以a*b/c = 1410065408/1000=1410065) 10000000
阅读全文
posted @ 2016-11-24 18:31
etcjd
摘要:1. Int Type: C++编译器在不同的计算机硬件上的表现是不同的。所谓32位编译器是指它能将程序源代码编译成最高为32位的CPU指令系统代码。或者更加直接地说,int类型的长度是32位的。 例如,在32位编译器中,若将代码编译成16位机指令系统,则: int a = 327777; //错,
阅读全文
posted @ 2016-11-23 17:31
etcjd
摘要:1、cin>> 用法1:最基本,也是最常用的用法,输入一个数字: 输入:2[回车]3[回车] 输出:5 或者 输入:23[回车] 输出:5 注意: 赋值语句“=”中间包含了强制类型转换,比如double型赋值给int整型,就会发生数据截断。 而输入流“cin>>”没有此功能,它只要求输入的内容与变量
阅读全文
posted @ 2016-11-23 13:37
etcjd

浙公网安备 33010602011771号