04 2022 档案
摘要:myString.h myString.cpp
阅读全文
摘要:函数对象:一个类重载了()它的对象可像函数一样使用 结果:
阅读全文
摘要:编译器默认提供了4个函数:无参构造、拷贝构造、析构、operator=(浅拷贝值传递)
阅读全文
摘要:我们经常new一个对象,而忘记释放,所以我们用智能指针来维护 智能指针:本身上是一个局部变量,维护了new出来的地址,在析构函数中会帮忙释放new出来的对象 在智能指针中重载了—> * 让其可以和普通指针一样操作对象 代码: 结果:
阅读全文
摘要:p--:先调用后减减 --p:先减减后调用 --p返回值为引用 函数声明为TYPE& operater--(); p--返回值为对象 函数声明为TYPE operator--(int);
阅读全文
摘要:可重载的运算符:几乎所有的运算符都可以重载,但运算符的使用时相当受限(1、c中无意义的运算符不能重载2、不能改变运算符的参数和优先级) 不能重载的运算符: . :: .* ?: sizeof
阅读全文
摘要:运算符重载:给运算符赋予新含义(运算符只能运算内置的数据类型,自定义的数据类型不能运算) 运行结果:
阅读全文
摘要:MyArray.h MyArray.cpp testmyarray.cpp 运行结果:
阅读全文
摘要:友元函数:让全局函数或类的成员函数访问私有成员 让全局函数成为友元函数: class person{ friend void show(person&p); private : int age; }; void show(person &p){ cout<<p.age=10<<endl; } 类成为
阅读全文
摘要:this指针的工作原理:类的成员函数(存放在代码区只有一份)默认添加了一个参数(类型*const this)指向调用该函数的对象 常函数(const修饰的成员函数):不能通过this指针修改this指向的对象内容(const person *const this) class person(){ p
阅读全文
摘要:注意:1、空类大小为一字节 2、类的实例化对象的内存大小只包含普通变量 3、静态成员变量储存在静态全局区,静态成员函数和普通成员函数存放在代码区故类的实例化对象不包含其大小 #include <iostream>using namespace std;class ming {public: int
阅读全文
摘要:单例模式:一个类只能实例化出一个对象 步骤:1、将有参构构造和拷贝构造私有 2、将静态成员指针私有并指向唯一的对象 3、提供一个静态成员函数将唯一的对象地址返回
阅读全文
摘要:在类的定义中,它的成员包括(成员变量、成员函数),都可用static修饰成静态成员 不管类创建了多少个对象,静态成员都只有一个拷贝这个拷贝属于中国类的对象的共享 静态成员变量: 1、内存中只有一份,多个对象共用一块内存 2、类内只能定义不能初始化(限定作用域)定义在全局 3、可通过对象和作用域访问
阅读全文
摘要:c中的动态申请:用malloc、free动态申请、释放内存不会调用构造函数和析构函数(一般c++中不能使用他们来动态申请和释放内存) c++中的动态申请、释放: 申请:类型 * p=new 类型; delete p; (数组: 类型 * p=new 类型[]; delete []p;) delete
阅读全文
摘要:类中有多个对象时: 构造:先构造里面的对象再构造外面的对象 析构:先析构外面的对象再析构里面的对象 #include <iostream> #include<string.h> #include<string> using namespace std; class phone{ public : p
阅读全文
摘要:初始化列表:构造函数相较与普通函数特有 与普通构造函数初始化的区别:普通构造函数为先定义后赋值而初始化列表是先声明在调用构造函数是定义后初始化 注意:初始化顺序和声明顺序相一致 class person{ public : person(int a,int b,int c): m_a(a),m_b(
阅读全文
摘要:浅拷贝:简单的值拷贝默认拷贝构造就浅拷贝 浅拷贝可能会出现的问题:简单的值拷贝可能会造成新旧对象的指针指向同一处内存当析构函数销毁对象时有会出现找不到地址可用销毁导致程序崩溃 解决方式:深拷贝:让新对象的指针指向新内存 class person{ public : person(){} person
阅读全文
摘要:构造:创建对象时对其进行初始化工作 析构:销毁对象时对其进行清理工作 注意:1、一般需要人为提供,若无提供编译器会自动提供(不做任何操作),无需人为调用调用时编译器自动调用 2、构造函数:函数名与类名一致无返回值不能写void可易有参数可用重载 3、析构函数:函数名等于类名前加~无返回值不能写voi
阅读全文
摘要:设计一个点和圆类,并判断两者的关系。 代码: class point{ public : void set_x(int X){x=X; } void set_y(int Y){ y=Y;} int get_x(){return x;} int get_y(){return y;} private :
阅读全文
摘要:类:事物所具有的共性(行为、属性)抽象出来封装在一起 对象:由类型实例化出对象 c++与c struct的区别:c中不能存放函数,只能存放属性,方法和属性分离,c++中则可存放函数。 c中表示事物的方法存在问题:方法属性分离,可能会出现行为调用出错(调用到不属于它的行为) c++对事物的封装-类:1
阅读全文
摘要:extern "C" :c++编译器编译c函数时需要声明extern “C” main.cpp test.h test.c # include <iostream> #pragma once int test(int a,int b){ # include "test.h" #if __cpulsp
阅读全文
摘要:函数重载:c++中函数名可相同,可有多个函数名相同的函数存在(重载:名字相同意义不同) 本质:c++编译器根据类型来修饰函数 条件:1、同一作用域 2、参数个数、类型、顺序不同 注意:1、返回值类型不能作为重载条件 2、默认参数可存在二义性,存在二义性时报错,要避免其他二义性行为 # include
阅读全文
摘要:给函数设置形参时设置,调用时需要传参,也可设置默认参数在占位参数上调用时可不传参,在函数的重载时使用 void fun(int a,int ){ }
阅读全文
摘要:形参可设置默认参数 注意:1、设置默认参数时声明、定义只可以设置一处 2、某处设置默认参数后往后的参数都需要设置默认参数 3、有实参用实参无实参用默认参数 void test(int a=1, int b=2){ //设置了两个默认参数 } void test02(){ test(1); test(
阅读全文
摘要:目的:保持处理宏的高效及安全性 解决的问题:1、c中预处理宏有些难以发现的问题 2、c++ 中预处理不能访问类成员,不能作用类的成员函数 作用:无函数调用时开销,又可像普通函数般进行参数、返回值类型安全检查、作为成员函数 注意:1、类的成员函数默认为内联函数 2、内联函数只是对编译器都建议,不一定会
阅读全文
摘要:常量引用:不能通过引用去修改引用所指向的内容 const int &ref =val; // const int *const ref =&val; 注意:可引用常量 (普通引用无法引用常量) const int & a=1; // int temp =1; const int & a =temp;
阅读全文
摘要:套用引用公式:Type & ref =val; 假设:type 类型为int * 由公式得 int * & ref = val; // int * *const ref=&val; void run(int * &q){ //int * & q=p; } void test(){ int * p=N
阅读全文
摘要:本质:c++底层实现的指针常量(Type & ref =val; // Type *const ref =&val)
阅读全文
摘要:注意:1、引用可作为形参较指针更为直观 2可作为返回值 (判断标准:空间是否释放) #include <iostream> #include <stdlib.h> using namespace std; void change(int & x,int & y){ //当引用作为形参时 调用者直接传
阅读全文
摘要:实质:取别名 格式:原类型&别名=原变量名; 注意:1、定义时必须初始化 2、初始化后不能够改变指向 3、不可对Null进行引用 4、可对任意类型取别名包括数组(int (&别名)[个数]=原数组名;) 5、&等号左边为引用右边为取地址
阅读全文
摘要:一:新增bool类型关键字:c中bool类型需要添加stdbool.h头文件,c++则可直接使用 void test(){ bool a=true; //c++可直接定义而c需添加头文件 true和false可直接用做常量使用 } 二:三目运算符:c++中返回的可以是个变量,但c语言中返回的表达式的
阅读全文
摘要:一:全局变量检测增强:c++编译对全局变量的声明定义有严格区别 //c中全局变量的声明及定义 //c++中全局变量的声明及定义 //c++全局变量写成下列形式则报错 int a;//定义 int a; int a; int a;//声明 (系统自动添加extern) extern int a; in
阅读全文
摘要:using 声明:使指定标识符可用 注意:与其他同名标识符有作用域冲突时产生二义性即报错 using 编辑指令: 使整个命名空间标识符可用 注意:与其他同名标识符作用域发生冲突使时优先使用局部变量就近原则,无二义性 #include <iostream> using namespace std; n
阅读全文
摘要:名字的控制:c可使用static关键字使该关键字在本单元内可见,c++则使用命名空间对名字的可见性及产生进行控制 命名空间:控制标识符的作用域(本质上就是一个作用域) 使用特点:1、必须定义在全局范围 2、可存放变量 函数 结构体 类 3、可重命名相当于合并 4、可嵌套命名空间 5、可空间内声明函数
阅读全文
摘要:冒号作用域 ::(该运算符为作用域):如果::前面什么都没加代表全局作用域 #include <iostream> using namespace std; int a=10; viod test(){ int a=1; cout << :: a<<endl; //输出全局变量a cout << a
阅读全文