C++进阶小结
1.C++中类的不同存储区的对象的初始值
class test;
class test
{
private:
int i;
int j;
public:
int geti()
{
return i;
}
int getj()
{
return j;
}
};
1.在堆上创建对象时,成员变量初始值为随机值
test *p = new test;
2.在栈上创建对象时,成员变量初始值为随机值
test t;
3.在静态存储区创建对象时,成员变量初始为
全部变量:test t;
静态变量 static test t;
2.C++类中const问题
const对象只能调用const成员函数,const成员函数也只能调用const成员函数,类成员中const成员是只读变量,可以通过修改指针指向的值来修改
3.类中成员函数与对象的关系
类的每个对象都拥有一套自己的成员变量,但是成员函数仅有一套,所有的对象共用这一套函数,函数被不同对象调用的区别在于类中提供了一个this指针,该指针指向特定的对象
4.拷贝构造函数中的const 对象为何直接调用成员private变量?
class test
{
int i;
} test(const test& t)
{
i=t.i;
}
我们都知道私有成员是可以通过成员函数来使用,拷贝构造函数是特殊的成员函数,所以可以直接使用privete成员
5.类中静态变量
公有静态变量可以被类名和对象名直接调用
私有静态变量只能通过对象名调用
静态变量只能在类外初始化,因为静态变量不属于任何一个对象
6.静态成员函数与普通成员函数的区别
静态成员函数中没有this指针
静态成员函数只能访问静态成员函数和静态变量(类似于const)
公有静态成员函数可以通过类名直接调用,也可以通过对象名(不分public和private),普通成员函数只能通过对象名调用,因为需要与对应的this指针相匹配
7.函数重载
函数名和函数参数是用来确定函数的,仅靠函数名不可以,且重载函数必须在同一作用域
静态函数可以和普通函数构成重载(同一作用域)
类中也可以重载函数(构造函数)
相同的参数,不同的顺序也能发生重载
double fun(int i,double j)
{ } double fun(double j,int i)
{ }
函数返回值不能做重载依据
形参中存在const不能重载
double fun(const int i,double j); double fun(int i,double j);
8 汇编代码与源代码
现代编译器会自动进行优化,导致源码的二进制代码被优化后无法区别,如前置++和后置++ ,所有无法从汇编代码获取程序源码
9 隐式类型转换
short 和 char 型做运算得到的结果为 int型,而非直观上的short型,因为4字节整型运算更加高效
10 转换构造函数
class test
{
public:
test(){} test(int i){}
}
如果存在如下代码
test t;
t=5;
此时就会调用test(int i)这个函数(转换构造函数),等价于t=test(5), 类似于将int 类型转换为test类型
可以在转换构造函数前添加 explicit 关键字来阻止编译器自动隐式转换
注:转换构造函数只有一个参数,且该参数类型为其他类型(不能是类本身类型)
11 类型转换函数
类中的成员函数 operator Type() ,Type 为不同于类类型
与转换构造函数类似
调用方式:隐式调用
12 子类中可以定义父类中的同名成员,但子类成员会隐藏(不等于没有)父类的成员,如果需要调用父类成员变量,需要加上父类的作用域分辨符
13 构造函数内部是不会发生多态,在构造函数执行时,虚函数表指针未被正确初始化,只会调用当前类中的版本
析构函数内部也不可能发生多态行为,在析构函数执行时,虚函数表指针已经被摧毁,只会调用当前类中的版本
构造函数不能成为虚函数,因为虚函数指针未被正确初始化
析构函数可以发生多态,既可以成为虚函数
14 函数模板创建过程中会有两个步骤
1.对模板本身进行编译
2.对替换后的代码进行编译
15 类模板特化只是模板的分开实现,本质上还是同一个类模板
16 重定义是一个类模板和一个新类(或者两个类模板),使用的时候需要考虑如何选择的问题
特化是以统一的方式使用类模板和特化类,编译器会优先选择特化类
17 智能指针 #include<memory>
auto_ptr:一个指针对象只能指向一片地址,且某一片地址只能被一个auto_ptr指针所指向,一旦发生赋值操作,内存所有权就会转换
share_ptr指针变量可以多个共享一片内存
unique_ptr与auto_ptr类似,但是不能转换内存所有权
Qt中的智能指针:
-------QPointer
优点:可以多个指针指向同一片内存,但是一旦内存被释放,所有的指针全为NULL,
缺点:析构时不会自动销毁所指向的内存
-------QSharePointer
它属于引用计数型指针,只有当引用计数为0时才会销毁对象
18 关键字 typeid()
当参数为类型名时,则返回类型名
当参数为变量时:
变量类型为普通类型时,则返回静态类型
变量类型为类类型,且不含虚函数时,则返回静态类型
变量类型为类类型,且含有虚函数时,则返回动态类型
19 编译器选择函数顺序
函数重载->函数模板->变参函数
PS:持续更新
C++进阶小结的更多相关文章
- 47-Python进阶小结
目录 Python进阶小结 一.异常TODO 二.深浅拷贝 2.1拷贝 2.2 浅拷贝 2.3 深拷贝 三.数据类型内置方法 3.1 数字类型内置方法 3.1.1 整型 3.1.2 浮点型 3.2 字 ...
- Python进阶小结
目录 一.异常TODO 二.深浅拷贝 2.1 拷贝 2.2 浅拷贝 2.3 深拷贝 三.数据类型内置方法 3.1 数字类型内置方法 3.1.1 整型 3.1.2 浮点型 3.2 字符串类型内置方法 3 ...
- Python【day 10】函数进阶-小结
本节主要内容1.动态参数 *args **kwargs 形参:*args将多个位置参数聚合打包成元组 **kwargs将多个关键字参数聚合打包成字典 实参:*li1将列表进行解包打散成多个位置参数 * ...
- sass的用法小结(四)进阶篇
Sass 的数据类型 Sass 既然有了类似编程语言的功能,自然也就有了简单的数据类型.这里简单的介绍一些 Sass 中的数据类型,因为在后面的讨论中要用到有关的内容. Sass 中主要有六种数据类型 ...
- ABP进阶教程11 - 小结
点这里进入ABP进阶教程目录 效果预览 至此,ABP进阶教程的查询/分页/排序/导出/打印示例已完成,效果如下 登录 首页 办公室信息 院系信息 课程信息 教职员信息 学生信息 新增 修改 删除 查询 ...
- Apex 中 DML 进阶知识小结
DML 选项 在 DML 语句执行的时候可以设置选项.这些选项用 DML.Options 类来表示. 完整的介绍在官方文档中. 在建立一个 DML.Options 实例之后,可以使用 setOptio ...
- C#进阶系列——WebApi 接口返回值不困惑:返回值类型详解
前言:已经有一个月没写点什么了,感觉心里空落落的.今天再来篇干货,想要学习Webapi的园友们速速动起来,跟着博主一起来学习吧.之前分享过一篇 C#进阶系列——WebApi接口传参不再困惑:传参详解 ...
- 架构设计:负载均衡层设计方案(3)——Nginx进阶
版权声明:欢迎转载,但是看在我辛勤劳动的份上,请注明来源:http://blog.csdn.net/yinwenjie(未经允许严禁用于商业用途!) 目录(?)[-] Nginx继续进阶 1gzip ...
- 分布式系统理论进阶 - Raft、Zab
引言 <分布式系统理论进阶 - Paxos>介绍了一致性协议Paxos,今天我们来学习另外两个常见的一致性协议——Raft和Zab.通过与Paxos对比,了解Raft和Zab的核心思想.加 ...
随机推荐
- 洛谷P2568 GCD(线性筛法)
题目链接:传送门 题目: 题目描述 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. 输入输出格式 输入格式: 一个整数N 输出格式: 答案 输入输出样例 ...
- C语言--第四周作业评分和总结(5班)
作业链接:https://edu.cnblogs.com/campus/hljkj/CS2017-5/homework/1129 一.评分要求 要求1 完成PTA第四周所有题(20分). 要求2 4道 ...
- .net core consul grpc--系统服务RPC实现通信(一)
.net core grpc 系统服务实现通信(一) 现在系统都服务化,.net core 实现服务化的方式有很多,我们通过grpc实现客户端.服务端通信. grpc(https://grpc.io/ ...
- 【BZOJ4521】【CQOI2016】手机号码
感觉数位dp好恶心…… 原题: 人们选择手机号码时都希望号码好记.吉利.比如号码中含有几位相邻的相同数字.不含谐音不 吉利的数字等.手机运营商在发行新号码时也会考虑这些因素,从号段中选取含有某些特征的 ...
- IntelliJ IDEA备忘
IntelliJ IDEA生成get/set方法的快捷键 IntelliJ IDEA生成get/set有2种方式,alt+enter.alt+insert.下面分别介绍这2种方式快速生成get与set ...
- 对《禁忌搜索(Tabu Search)算法及python实现》的修改
这个算法是在听北大人工智能mooc的时候,老师讲的一种局部搜索算法,可是举得例子不太明白.搜索网页后,发现<禁忌搜索(Tabu Search)算法及python实现>(https://bl ...
- What's New In Zeebe: Scaling Zeebe, New Client APIs, Faster Requests, Timestamps, NodeJS Client, and Default Topic is Back!
Written by Daniel Meyer on May 16 2018 in the What's New In Zeebe category. Welcome to the first-eve ...
- sqler sql 转rest api redis 接口使用
sqler 支持redis 协议,我们可以用过redis client 连接sqler,他会将宏住转换为redis command 实现上看源码我们发现是基于一个开源的redis 协议的golang ...
- caller
caller返回调用了当前函数的那个对象(谁call了当前函数,即当前函数的caller) 对于函数来说,caller 属性只有在函数执行时才有定义 假如函数是由顶层(window)调用的,那么 ca ...
- mysql 严格模式 Strict Mode说明(转)
转自https://www.cnblogs.com/jhcelue/p/7290243.html 1.开启与关闭Strict Mode方法 找到mysql安装文件夹下的my.cnf(windows系统 ...