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的核心思想.加 ...
随机推荐
- XXS level4
(1)查看PHP源代码 <?php ini_set("display_errors", 0); $str = $_GET["keyword"]; $str ...
- 网页筛选Automatic Input Enrichment - FLAIR
http://www.cs.rochester.edu/~tetreaul/Presentations-and-Posters/0504.pdf 介绍了一个在线平台https://eflnotes.w ...
- Windows 清理磁盘
====手动清理C盘(开始\运行\cleanmgr,选择C盘...)或者如下右键C盘,选择属性,点击通用页签下方[磁盘清理]按钮.磁盘清理界面,中间部分可以选择要清理的项目,可以全选.然后点击下方的清 ...
- 02 http,servlet,servletconfig,HttpServletRequest ,HttpServletResponse
Http协议 协议:双方在交互.通讯的时候, 遵守的一种规范.规则.http协议:针对网络上的客户端 与 服务器端在执行http请求的时候,遵守的一种规范. 其实就是规定了客户端在访问服务器端的时候, ...
- 模块化,AMD规范
模块化:代码量比较大,可能会有几个人同时写一个页面,同样写在一个文件里面,可能会有冲突,模块化可以解决代码的冲突(匿名函数调用,自己调用自己,就是立即执行函数) 团队的分工更加的明确 异步的执行: A ...
- pycharm汉化 (ubuntu版)
终端依次输入 cd /tmp git clone https://github.com/ewen0930/PyCharm-Chinese cd Pycharm-Chinese bash packag ...
- sql优化学习(一)
找到一套好的sql优化视频,地址如下: http://www.ppvke.com/10355.html p.s. 我在百度搜索半天都是些乱七八糟的东西,我用google搜索后,立刻就发现上面的视频地址 ...
- 反射,内省,BeanUtil的区别
PS:为了操作反射方便,sun创建了 内省, Apache闲麻烦自己创建了BeanUtils 1.开发框架时,经常需要使用java对象的属性来封装程序的数据,每次都使用反射技术完成此类操作过于麻烦,所 ...
- Linux内核Inotify机制学习笔记
一.Inotify简介: Inotify是一种文件变化通知机制,Linux内核从2.6.13开始引入.它是一个内核用于通知用户空间程序文件系统变化的机制.开源社区提出用户态需要内核提供一些机制,以便用 ...
- SharePoint Online 怎样让用户只能拥有sub site 的权限
大家使用SharePoint 可能遇到这样的问题. 我怎样能设置manager 为site 的管理人员. 而我收下不同部门的员工只能访问他自己的sub site呢? 这个设置其实很简单. 1. 简 ...