随笔分类 -  c++

摘要:STL:标准模板库(standard template library)是c++标准库的一部分(80%),使用c++的template机制来表达泛型的库。 STL的六大组件:容器(container)、算法(Algorithm)、迭代器(Iterator)、仿函数(Function object)、 阅读全文
posted @ 2016-10-17 22:32 e-data
摘要:数据类型参数化——模板。模板说明的类属参数必须在函数定义中至少出现一次,函数模板定义由模板说明和函数定义组成。 泛型编程函数的使用方法: 1、自动类型推导 2、具体类型调用 函数模板遇上函数重载: 函数模板不能完成参数的隐式转换。函数模板严格检查参数类型。 函数重载可以参与函数模板。 匹配约定: 首 阅读全文
posted @ 2016-10-17 21:02 e-data
摘要:定义数组类型: 定义数组指针类型: c语言中的语句块:(”{}“之间的内容是语句块,在语句块的开头可以定义变量,因为c编译器要求变量的定义严格放在语句块的前端,使用语句块可以在函数中的任意地方定义变量了。实际上任然相当于在函数开头定义。) 定义函数类型: 定义函数指针类型: 阅读全文
posted @ 2016-10-17 21:00 e-data
摘要:纯虚函数: 含有纯虚函数的的类——抽象类。(是含有,不是说类中只能存在纯虚函数) 纯虚函数在派生类中被实现,只有类中所有纯虚函数被实现了之后才能被实例化——定义对象。 抽象类的意义: 因为抽象类提供了纯虚函数,它是一个公共接口,抽象类自身不定义实现,而是把实现丢给它的子类。这样可以通过父类指针的多态 阅读全文
posted @ 2016-10-17 14:32 e-data
摘要:多态成立的三个条件:(面向对象的编程共同的特征) 1、要有继承 2、要有函数重写(函数名相同,参数相同)(c++中是虚函数重写) 3、要有基类指针指向子类对象(基类引用指向子类对象) 动态联编和静态联编: 为什么隐藏关系下,调用函数要以指针或是引用类型作为标准呢,因为是静态联编,是编译器在编译时已经 阅读全文
posted @ 2016-10-17 14:29 e-data
摘要:赋值兼容性原则: 继承中的对象模型: 在子类对象构造时,在子类对象中需要调用基类构造函数来对继承而来的成员变量进行初始化; 在子类对象析构时,在子类对象中需要调用基类的析构函数来对继承而来的成员变量进行清理。 继承中构造析构: 构造:创建子类对象时,先调用父类构造函数 析构:先析构子类对象,再调用基 阅读全文
posted @ 2016-10-17 14:28 e-data
摘要:class complex { public: complex fun() const { return *this; } complex():a(1),b(2){} private: int a; int b; } complex ad; ad.fun();... 阅读全文
posted @ 2016-10-17 14:28 e-data
摘要:c++编译器提供默认赋值运算重载函数。 默认的拷贝构造函数与默认赋值操作重载函数的的异同点: 构造函数是用来初始化新对象的;而赋值重载函数是用来给一个已经存在的对象赋值的。——调用场景不同。 默认拷贝是浅拷贝,只是成员变量的简单复制(成员变量空间创建并赋值);默认赋值重载是成员变量的简单赋值(成员变 阅读全文
posted @ 2016-10-17 14:26 e-data
摘要:友元函数是一个全局函数,只要把一个全局函数声明为某个类的友元函数,那么在这个函数中可以使用类的私有成员(因为类的私有成员一般只能在类中可访问,在类外只能使用成员函数来间接访问),所以友元函数破坏了面向对象的封装性。 因为要访问对象的私有成员,所以一般友元函数会设计一个形参——对象类型: 那么将友元函 阅读全文
posted @ 2016-10-17 14:25 e-data
摘要:c++编译器如何完成面向对象理论到计算机程序的转化的? 类:属性+方法的封装 >程序:数据段+代码段 成员变量: 普通成员变量,存储于对象中 静态成员变量,存储于全局静态存储区 成员函数:存储于代码段 既然成员函数和成员变量不在分配的空间的同一处,那么成员函数怎么访问到指定对象的成员变量呢? a.f 阅读全文
posted @ 2016-10-17 14:24 e-data
摘要:new delete是c++的关键字。 new在堆上分配内存,分配类型:基础类型、数组类型、对象。 new delete是操作符,不是函数。 new操作符,自动会调用构造函数,delete操作符也会自动去调用析构函数。这是与malloc,free的区别。 问题:malloc申请的空间能用delete 阅读全文
posted @ 2016-10-17 14:23 e-data
摘要:把一个类的成员说明为static时,那么用这个类定义的多个对象共享这个成员(修改是同步的)。 静态数据成员: static的成员变量,在对象之前被创建。它可以被静态或是非静态成员函数访问。返过来,非静态成员变量,在静态成员函数中不可被访问。 那么静态成员函数能够访问的成员变量是什么呢——静态成员变量 阅读全文
posted @ 2016-10-17 14:23 e-data
摘要:c++为初始化提供了三种方案: 1、无参构造函数——完成对象的初始化,当写了构造函数,调用写的构造函数;如果没写,调用默认构造函数。 2、带参构造函数(调用方法有三种) 3、复制构造函数(拷贝构造函数)(调用方法有4种) 带参构造函数的用法: 拷贝构造函数的四种应用场景: 默认拷贝构造函数,也叫做浅 阅读全文
posted @ 2016-10-17 14:08 e-data
摘要:实际项目中,主要用c++的部分——框架(MFC,QT,COCOX2d) 现有代码:两个类——圆类和点类,程序实现判断圆与点的位置。 为项目添加mycircle.h文件:(内容) 为项目添加mycircle.cpp文件:(内容) 为项目添加myPoint.h文件:(内容) 为项目添加myPoint.c 阅读全文
posted @ 2016-10-17 14:04 e-data
摘要:默认参数的规则:只有参数列表后面的参数才能被设置带默认值。 在参数列表中,在第一次出现默认参数的后面的所有参数都必须有默认参数。 函数占位参数: 默认参数与占位参数 “在一起”: 函数重载: 在相同作用域内(比如在相同类中) 不以返回类型构成重载;仅以参数构成重载(参数个数,顺序,类型) 重载函数与 阅读全文
posted @ 2016-10-17 14:03 e-data
摘要:inline是一个修饰词。 inline关键字必须在函数定义前,而不是函数声明语句。 inline是一种请求,告诉c++编译器进行内联编译——将函数体直接插入到函数调用处。这种请求可能会被拒绝。 内联发生在程序编译。内联函数是一种特殊函数,具有普通函数的特征(参数检测,返回类型等)。 内联函数相对于 阅读全文
posted @ 2016-10-17 14:02 e-data
摘要:引用是c++的语法,所以c编译器是不能识别引用的。 引用的实质: 引用是一个只读的常量,引用在C++中的内部实现是一个常指针。 引用的意义: 作为变量的别名而存在,因此在一些场合可以代替指针 c++编译器中,普通引用会分配空间吗? 由于引用的实质是常指针,所以它需要占用内存,那么怎么解释下吗的语法? 阅读全文
posted @ 2016-10-17 13:54 e-data
摘要:c++新增加的类型——bool sizeof(bool) ==1; bool 数据类型只能取值 true(1),false(0) bool bl = 54; printf("%d\n",bl); //打印1 c++对三目运算符进行了功能增强: c编译器中,因为表达式的值是存放在寄存器中的,变量才是在 阅读全文
posted @ 2016-10-17 13:41 e-data
摘要:实用性的增强: c语言中变量的定义必须放在作用域开始的位置来定义。而c++中更加强调语言的实用性,所有变量都可以在需要使用时再定义。 register关键字的增强: 首先,register变量必须是能被CPU所接受的类型。这通常意味着register变量必须是一个单个的值,并且长度应该小于或者等于整 阅读全文
posted @ 2016-10-17 13:36 e-data
摘要:namespace概念 所谓namespace,是指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。 在C++中,名称(name)可以是符号常量、变量、宏、函数、结构、枚举、类和对象等等。为了避免,在大规模程序的设计中,以及在程序员使用各种各样的C 阅读全文
posted @ 2016-10-17 13:19 e-data