c++基础知识点三
来源:互联网 发布:中老年品牌女装 知乎 编辑:程序博客网 时间:2024/05/05 10:13
静态函数的可以对象不用实例化,直接类名.函数名调用
拷贝构造函数:创建一个CExample类包含两个函数,一个构造函数,一个拷贝构造函数,定义一个CExample对象,CExample B = A; // CExample B(A); 也是一样的,那么会自动调用CExample(const CExample& C) 就是我们自定义的拷贝构造函数,它必须的一个参数是本类型的一个引用变量。
当g_Fun()函数执行到return时,会产生以下几个重要步骤:
(1). 先会产生一个临时变量,就叫XXXX吧。
(2). 然后调用拷贝构造函数把temp的值给XXXX。整个这两个步骤有点像:CExample XXXX(temp);
(3). 在函数执行到最后先析构temp局部变量。
(4). 等g_Fun()执行完后再析构掉XXXX对象。
(注:返回对象将调用复制构造函数,而返回引用不会,效率更高)
由于const函数可以保证不修改类里面的成员变量,那么变量加上mutable可以抵消
常量(const)和引用在一个类里面定义了必须初始化,如果const一个对象,那么不可以调用非const的成员函数
指针数组的应用:创建一个指针数组,每个指针指向一个MainWindow对象,for遍历每个元素,可以p[i]对每个对象进行操作
struct foo{ string name ; int id ; foo(string s, int i):name(s), id(i){} ; // 初始化列表};这里是初始化列表的用法:foo构造函数传进来后,s赋给name,i赋给id
new和delete会自动调用构造析构函数,而malloc和free只会分配内存,不会调用
多继承:
当一个类继承了另外两个类时,那么写它的构造函数也应当这样写
这样调用zajiao的构造函数时候也分别调用了继承的那两个类的构造函数,调用函数方法的时候这样调用区分3个类
私有继承是把父类所有变量都变成私有,保护继承是把父类公有变量变成保护变量
假设一个类fushu,代码 fushu fu=10;会自动进行隐式转换也即fushu fu=fushu(10);(该代码和fushu fu=(fushu)10等同)将10作为参数跳转到fushu的构造函数,然而如果我们不想让他进行隐式转换需要在构造函数前面加上explicit,必须前面加上fushu这样的显示转换才可以
这里fushu fu=10可以转化为fushu fu(10);那么我们zhengshu zheng; fushu fu=zheng这样是不行的两个对象类型不匹配,如何让它成立呢,因为fushu fu=zheng等价为fushu fu(zheng);那我我们在fushu 的构造函数中传参传zhengshu对象就可以了
父类的指针可以用个强转成子类指针访问子类的同名函数
抽象类不可以实例化,把所有接口都实现了才可以实例化,一个或多个虚函数是个指向虚函数表的指针,占4个字节
类模板:
初始化两个类模板,当传入t111时,赋值给t11。传入t222赋值给t22实际调用的时候传入实际类的类型即可
这里final函数必须是虚函数,作用是该函数无法重写
override只存在于子类当中,且函数是父类含有的且是虚函数,用于警示覆写父类的同名函数
一般类里定义一个static变量可以用来记录创建的对象数目
在构造函数中使用new来分配内存时,必须在相应的析构函数汇总使用delete来释放内存,如果使用new[]来分配内存,使用deletel[]来释放
一个对象里面不要这样复制字符串(指针):sailor.str=sport.str这样是字符串的指针复制,这样会析构两次,出错,解决办法是深拷贝,同理对象赋值里面包含指针你就要小心了,要用深拷贝
StringBad::StringBad(const StringBad & st)
{
len=st.len;
str=new char[len+1];
std::strcpy(str,st.str);
}
这里this指什么呢,我觉得调用的是String对象里面的方法,所以指String对象
String & String ::operator=(const String & st)
{
if(this==&st)
return *this;
}
静态联编:由于重载,编译器必须查看函数参数以及函数名才能确定是哪个参数,这种在编译过程完成的联编叫静态联编
动态联编:编译器必须生成能够在程序运行时选择正确的虚方法的代码
如果定义的类将被用作基类,那么应将这些要在子类中重新定义的类声明为虚的,虚函数为了重载和多态,在基类中有定义,所以子类中可以重写也可以不写,纯虚函数(在虚函数后面加上=0为纯虚)在基类中不定义,必须在子类中加以实现
创建子类对象时,先调用基类的构造方法,然后调用子类的构造方法,删除对象时,先调用子类的析构,在调用父类
抽象模板类:
由于抽象类不能实例化,那么只能用一个指针来进行初始化
使用c++在一个字符串提取子字符串,先创建一个结构体,保存所以可能类型,然后扫描完可以输出所有的子字符串
这里每个字符串中间有个空格所以我们可以提取子字符串,如果每个字符串直接是#我们可以将#换成空格然后。。。
内存映射:对于几TB的海量存储,不能用一些ReadFile,WriteFile这些api来读写文件,将文件从磁盘加载到内存,可以解决多个进程共享数据的问题
Lambda表达式:是一个匿名函数,即没有函数名的函数。,比如在c++中
如果在[]当中加this,说明要引用this
这里->指的返回类型为double
有空看看100条经典的c++笔试题目,
- C语言基础-零散知识点总结(三)
- C语言基础知识点(二)三大控制结构
- SpringMVC-基础知识点(三)
- c++基础知识点三
- C基础知识点小记
- C 指针 基础知识点
- C基础知识点
- Objective-C基础知识点
- Objective-C基础知识点
- Objective-C基础知识点
- Objective-C基础知识点
- Objective-C基础知识点
- Objective-C基础知识点
- c/c++基础知识点
- C基础中的知识点
- C语言程序设计 基础知识点
- c/c++基础知识点
- Java基础知识点总结三
- Cartographer资料分享
- Android传感器的使用开发、简易指南针
- express 学习笔记(四)css
- php.ini配置文件详解
- Android 程序框架设计
- c++基础知识点三
- 正则化--《机器学习》课程笔记
- 初学d3
- Yii2 深入了解模型之增删改查
- matlab·计算机视觉·工具箱
- Android应用程序启动时出现白色背景问题
- arguments.callee用法
- swift入门第三季(枚举,类,面向对象, 协议)
- haar