c++
小新 蜡笔
这个作者很懒,什么都没留下…
展开
-
C++拷贝构造函数
所谓return对象, 实际上是调用拷贝构造函数把该对象的值拷入临时对象空间。1.当函数的形参是类的对象, 调用函数时, 进行形参与实参结合时使用。因为局部对象在离开建立。它的函数时就消亡了,不可能在返回调用函数后继续生存,所以在处理这种情况时,编译系统会在调用函数的表达式中创建一个无名临时对。拷贝构造函数:是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。深拷贝 (深度克隆):不紧复制对象的基本类,同时也复制原对象中的对象.就是说完全是新对象产生的....原创 2022-08-04 11:36:31 · 256 阅读 · 1 评论 -
C++静态成员
对象的生存期1.局部对象2.全局对象3.动态创建的对象1.对于局部定义的对象,每当程序控制流到达该对象定义处时,调用构造函数。当程序控制走出该局部域时,则调用析构函数。2.对于静态局部定义的对象,在程序控制首次到达该对象定义处时,调用构造函数。当整个程序结束时调用析构函数。2.对全局定义的对象,当程序进入入口函数main之前对象就已经定义,这时要调用构造函数。整个程序结束时调用析构函数。3.动态创建的对象,使用new创建对象, delete释放对象.静态成员由关键字static修饰说明的类原创 2022-05-17 16:37:02 · 257 阅读 · 0 评论 -
C++拷贝构造函数
拷贝构造函数拷贝构造函数:是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象拷贝构造函数还在另二个方面使用:1.当函数的形参是类的对象, 调用函数时, 进行形参与实参结合时使用。这时要在内存新建立一个局部对象, 并把实参拷贝到新的对象空间中。2.当函数的返回值是类对象, 函数执行完成返回调用者时使用。理由也是要建立一个临时对象中,再返回调用者。因为局部对象在离开建立它的函数时就消亡了,不可能在返回调用函数后继续生存,所以在处理这种情况时,编译系统会在调用函数的原创 2022-05-17 16:34:08 · 298 阅读 · 0 评论 -
C++友元
友元friend机制允许一个类授权其他的函数访问它的非公有成员.友元声明以关键字friend开头,它只能出现在类的声明中,它们不受其在类体中的public private和protected区的影响.友元分为外部函数友元,成员函数友元,类友元。友元没有共有私有类别,本身就是一个类别友元的特点:1.不具有对称性: A是B的友元,并不意味着B是A的友元。2.不具有传递性: A是B的友元,B是C的友元, 但A不是C的友元。3.不具有继承性: Base 类型继承Object类型,如果Object 类型原创 2022-05-17 16:28:43 · 105 阅读 · 0 评论 -
C++类与普通类型的相互转换
转换构造函数转换构造函数的作用是将一个其他类型的数据转换成一个类的对象。当一个构造函数只有一个参数,而且该参数又不是本类的const引用时,这种构造函数称为转换构造函数。转换构造函数是对构造函数的重载。将double型的参数r转换成Complex类的对象,将r作为复数的实部,虚部为0。Complex(double r) { real=r; imag=0; } 隐式转换用户可以根据需要定义转换构造函数,在函数体中告诉编译系统怎样去进行转换。//隐式转换c原创 2022-05-17 16:25:52 · 422 阅读 · 0 评论 -
C++构造函数和析构函数基本概念
构造函数构造函数用途:创建对象初始化对象类型转换定义:(生而不同)1.函数名与类名相同。2.构造函数无函数返回类型说明。注意是没有而不是void,即什么也不写,也不可写void。实际上构造函数有返回值,返回的就是构造函数所创建的对象。3.在程序运行时,当新的对象被建立,该对象所属的类构造函数自动被调用,在该对象生存期中也只调用这一次。4.构造函数可以重载。严格地讲,类中可以定义多个构造函数,它们由不同的参数表区分,系统在自动调用时按一般函数重载的规则选一个执行。5.构造函数可以在原创 2022-05-17 16:21:29 · 256 阅读 · 0 评论 -
C++引用和指针的区别
程序为指针变量分配内存区域 而不为引用分配内存区域从语法规则上讲,指针变量存储某个实例(变量或对象)的地址; 引用是某个实例的别名。程序为指针变量分配内存区域; 而不为引用分配内存区域。解引用是指针使用时要在前加“*”;原创 2022-04-24 13:36:37 · 1049 阅读 · 0 评论 -
C++ auto声明
auto类型推导: auto 定义的变量,可以根据初始化的值,在编译时推导出变量名的类型。int main(){ auto x=5;//ok x是int类型 auto pi = new auto(1); // ok pi 被推导为int *; const auto *xp = &x, u = 6; // ok xp是const int*类型,u是const int类型 static auto dx = 0.0; // ok dx是double类型 auto int b; // e原创 2022-05-09 23:11:27 · 830 阅读 · 0 评论 -
C++引用基本概念
引用基本语法:数据类型 &别名=原名 (别名和原名指向同一块内存) int &b=a;1.引用必须初始化 int &a (error)2.引用初始化后不可更改3.不可有引用的引用(int& b=a;发现是引用,转换为int* const b =&a; 指针常量使指针指向不可更改,所以初始化后不可更改)引用一个不可取地址的量,这个量就会生成一个临时量然后被引用,而且临时量都具有常属性,所以要用常引用 const int &b=100;void原创 2022-04-24 13:33:50 · 1135 阅读 · 0 评论 -
C++内联函数
内联函数 替代c语言的宏函数 是一种更安全的宏1.内联的函数必须是非常简单的函数,不带if,for2.inline函数只在release版本中可用,debug版本中不可用当函数被调用的时候,会在编译时期在调用点将函数展开没有栈帧的开辟和回退,减少了现场保护和现场恢复,节省了大量时间空间inline 只是对编译器的建议,建议将该函数处理为内联inline函数只在当前文件有效吗,生成的是local符号inline不建议声明和定义分离,分离会导致链接错误。因为inline被展开, 就没有函数地址原创 2022-04-24 13:31:38 · 974 阅读 · 0 评论 -
C++输入和输出
#include < iostream>using namespace std;当使用的时候,该头文件没有定义全局命名空间,必须使用namespace std;这样才能正确使用cout。system(“pause”);代表着在该程序中调用了pause命令,由操作系统来暂停程序的执行。cerr流对象cerr流对象是标准错误流,cerr流已被指定为与显示器关联。cerr的作用是向标准错误设备(standard error device)输出有关出错信息。cerr与标准输出流cout的作用原创 2022-04-24 12:54:19 · 145 阅读 · 0 评论 -
C++基于范围的for循环
模板:for(ElemType val: array){ statement 循环体....}ElemType:是范围变量的数据类型。它必须与数组(容器)元素的数据类型一样,或者是数组元素可以自动转换过来的类型。val :是范围变量的名称。该变量将在循环迭代期间依次接收数组中的元素值。在第一次循环迭代期间,它接收的是第一个元素的值;在第二次循环迭代期间,它接收的是第二个元素的值;以此类推。array:是要让该循环进行处理的数组(容器)(==必须包含长度和数组首地址两个元素==指针不可以)原创 2022-05-09 23:14:11 · 846 阅读 · 0 评论 -
C++模板(函数模板,类模板)
模板概念函数模板可以用来创建一个通用功能的函数, 以支持多种不同形参,简化重载函数的设计。函数模板定义如下:template<模板参数表>返回类型函数名(形式参数表){ .....;//函数体}<模板参数表> (template parameter list)尖括号中不能为空,参数可以有多个,用逗号分开。模板参数主要是模板类型参数。模板类型参数(template type parameter)代表-种类型,由关键字class 或typename (建议用type原创 2022-05-17 16:09:49 · 333 阅读 · 0 评论 -
C++命名空间
在C++中支持三种域:局部域、名字空间域和类域。名字空间域是随标准C++而引入的。它相当于一个更加灵活的文件域(全局域),可以用花括号把文件的一部分括起来,并以关键字namespace开头给它起一个名字花括号括起来的部分称声明块。声明块中可以包括:类变量(带有初始化)、函数(带有定义)等。最外层的名字空间域称为全局名字空间域即文件域。名字空间域的引入,主要是为了解决全局名字空间污染(global namespace pollution)问题,即防止程序中的全局实体名与其他程序中的全局实体名,命名原创 2022-05-17 16:13:48 · 272 阅读 · 0 评论