c++基础(上) 听课流水账
1、pass by value / pass by pointer / pass by reference
pass by value:实参和形参不是同一个值,因此交换的是形参的值,当函数swap结束后,a和b的值并没有发生交换
pass by pointer and pass by reference :实参和形参是相同的。
2、动态内存
申请失败的返回值是 0 而不是 NULL, null在cpp中废止了。
申请一个长度我10,初始值都为0的空间
int *num= new int[10]();
3、对比new和malloc
4、cpp内存模型
内存模型:栈、堆、静态区、常量区。
5、数组内存模型
5、const char * / char * const / char const *
在c中,const是只读变量,cpp里const指的是常量。
6、常量指针和指针常量
下图为p1常量指针——p1所指地址上的内容不可以通过p1做出改动
下图p2为指针常量——p2所指的地址不可以发生改动
数组名就是一个指针常量
实例:
下图中的int const* pi和const int* pci是一样的
7、UML类图
一些编码规范:类名首字母大写;
8、匿名对象
9、访问对象成员
返回值类型 类名 : : 函数名
10、cpp的string类型
11、访问器与更改器
12、同名屏蔽
#include "pch.h"
#include<iostream>
using namespace std;class Foo {
public:int x;int y;Foo() {x = 10;y = 10;}void p() {int x = 20;cout << x << endl;cout << y << endl;}
};int main(int argc, char **argv)
{Foo foo;foo.p();return 0;
}
运行结果: 20 10
13、成员函数的this指针
14、避免同名屏蔽的简单方法
15、对象数组
#include "pch.h"
#include <iostream>
using namespace std;class C {
public:C(int i) { //带参构造函数 std::cout << "\t parameterized ctor" << std::endl;}C() { //无参(默认)构造函数 std::cout << "\t default ctor" << std::endl;}C(const C& c) { //拷贝构造函数 std::cout << "\t copy ctor" << std::endl;}C& operator =(const C& c) { //重载了类C的赋值运算符,观察main()中的对象赋值现象 std::cout << "\t assignment operator" << std::endl;return *this;}
};int main() {cout << "C c1;" << endl;C c1; //调用无参(默认)构造函数cout << "C c2(2);" << endl;C c2(2); //调用有参构造函数cout << "C c3 = c1;" << endl;C c3 = c1; //调用拷贝构造函数cout << "C c4 = C();" << endl;C c4 = C(); //编译器将之等价为 C c4;cout << "C c5 = C(5);" << endl;C c5 = C(5); //编译器将之等价为 C c5(5);cout << "C c6(c1);" << endl;C c6(c1); //调用拷贝构造函数 cout << "C c7(C(7));" << endl;C c7(C(7)); //编译器将之等价为 C c7(7);cout << "C c8[4] = {C(), C(18), c7};" << endl;C c8[4] = { C(), C(18), c7 }; //c8中的4个元素初始化时,是看做4个独立的对象处理: //C c80 = C(); 调默认构造函数 //C c81 = C(18); 调有参构造函数 //C c82 = c7; 调拷贝构造函数 //C c83 = C(); 调默认构造函数 cout << "C c9; c9 = C(9);" << endl;C c9; //调用默认构造函数 c9 = C(9); //先调用有参构造函数构造一个匿名对象C(9),然后调用赋值运算符将该匿名对象赋值给c9return 0;
}
16、封装
当你的数据域是对象类型的时候,他必须放在构造函数的初始化列表里面进行构建,除非这个数据域的对象类型中有默认的无参构造函数。
17、不可变对象
定义:创建之后,不可变对象不可修改,除非通过成员拷贝。
如何让类“不可改变”:
1、数据域均设置为私有属性。
2、没有接口,使得外部可以调用来更改你的数据。
3、也没有能够返回可变数据域对象的引用或指针的访问器。
不可变类的一个特征是线程安全的,所以他有用。
18、避免多次声明
19、static
本文件内的static函数只允许本文件访问
下图中的静态数据成员numberofObjects,被类Circle的对象们共享。
静态成员变量只能放在所有函数的外面进行初始化
numberOfObjects一定要初始化,不然会报错
20、使用静态成员函数的规则
静态成员函数的访问规则
21、析构函数
22、拷贝构造
拷贝构造函数的形式以及何时会调用拷贝构造函数
注意下图右下角的赋值 x c = b; ,构造出的c里面传入的是默认参数 1 。
浅拷贝和深拷贝(类中数据成员如果含有指针,一定要自己写拷贝构造函数,因为编译器默认给生成的是浅拷贝版的拷贝构造函数,容易出问题的)
拷贝构造函数是一种特殊的构造函数
23、写一个类,实现栈的功能
24、写一个类,实现vector
24、一些编码规范
25、继承
派生类不能继承的是:
1、构造函数(cpp 11 中已经允许)
2、析构函数
3、友元函数
4、拷贝赋值函数
派生类构造函数调用基类构造函数的方法 :
若没有显示的调用基类的构造函数,则编译器默认调用无参的基类构造函数
(如果你写的构造函数有参,则编译器会报错,因为找不到无参的积累构造函数)
构造和析构的顺序
26、重定义
派生类对父类的同名函数内容进行修改。不修改的地方:
1、返回值类型
2、传入的参数
3、函数名
区分重定义和重载
27、绑定
基类中定义的虚函数,在派生类中的同名函数会自动变成虚函数,无需添加virtual关键字。
总结静态绑定和动态绑定
下面四张图的总结:
访问方式 | 访问对象 |
对象调用(p.f()) | 子类同名函数 |
父类指针指向子类对象(图2) | 父类同名函数 |
父类指针指向子类对象(图3) | 子类的同名虚函数 |
28、protected
protected成员可以被类内成员函数直接获取,不可以通过对象来获取。
29、几种继承方式的总结
30、抽象类与纯虚函数
抽象类(有纯虚函数的类是抽象类)不能被实例化
31、动态转换
32、向上转型和向下转型
向上转型可不使用dynamic_cast,而是隐式转换
向下转型必须使用dynamic_cast进行显示转换。
33、typeid运算符——用于获取对象所属的类的信息
可将派生类对象截取,只是用继承来的信息;但是不能将基类对象加长,无中生有变出派生类对象。(如下图:circle是派生类)
c++基础(上) 听课流水账相关推荐
- 灵活性是原则性基础上的灵活
灵活性是原则性基础上的灵活,没有原则性的灵活是耍流氓. 原则性是质,灵活性是量,灵活性有度的要求,就是不能改变质. 转载于:https://www.cnblogs.com/jcode/p/596186 ...
- R语言构建随机森林模型randomForest分类模型并评估模型在测试集和训练集上的效果(accuray、F1、偏差Deviance):随机森林在Bagging算法的基础上加入了列采样(分枝特征随机)
R语言构建随机森林模型randomForest分类模型并评估模型在测试集和训练集上的效果(accuray.F1.偏差Deviance):随机森林在Bagging算法的基础上加入了列采样(分枝特征随机) ...
- 我们为什么不能只相信建立在深度学习基础上的人工智能系统
来源:简书 本文摘自: https://www.jianshu.com/p/55e1abcd896d Gary Marcus介绍了如何实现通用智能以及为什么通用智能可能会让机器更安全. 加里•马库斯( ...
- 脑内世界模型:脑科学基础上的意识问题哲学解说
来源:<华侨大学学报>哲学社会科学版2018年第5期 作者:方圆(中国科学院大学人文学院博士后研究人员) 本文旨在以当今时代脑科学研究结论为基础,在哲学层面回答"意识是什么&qu ...
- [Hadoop in China 2011] Facebook Message在HBase基础上的应用
http://tech.it168.com/a2011/1203/1283/000001283206.shtml 在今天下午进行的NoSQL系统及应用分论坛中,来自Facebook的技术经理Guoqi ...
- 网络推广外包没有效果?很可能是在网络推广外包基础上出现问题!
有些企业客户在通过网络推广外包运营优化后都想看到网站收录排名的效果如何,但是往往有些意料之外的外包公司在长期运营优化下并没有体现出专业网络公司的专业水准,也就是说很多企业网站在开始外包期间并没有体现出 ...
- C++习题 商品销售(商店销售某一商品,每天公布统一的折扣(discount)。同时允许销售人员在销售时灵活掌握售价(price),在此基础上,一次购10件以上者,还可以享受9.8折优惠。)...
Description 商店销售某一商品,每天公布统一的折扣(discount).同时允许销售人员在销售时灵活掌握售价(price),在此基础上,一次购10件以上者,还可以享受9.8折优惠.现已知当天 ...
- 已经yum安装的基础上,升级编译安装git
一. 首先yum安装git # yum install git -y # git --version git version 1.7.1 二. 在已经yum安装的基础上升级git到2.7.4版本 1. ...
- 类的继承定义一个computer类在此基础上派生出两个子类(继承与多态绑定)
题目如下 定义一个计算机类(Computer),并在它的基础上派生出两个子类:台上机(Desktop)和便携机类(Notebook),在Computer中定义几个方法,并在子类Desktop和Note ...
- TF之TFSlim:利用经典VGG16模型(InceptionV3)在ImageNet数据集基础上训练自己的五个图像类别数据集的训练过程记录
TF之TFSlim:利用经典VGG16模型(InceptionV3)在ImageNet数据集基础上训练自己的五个图像类别数据集的训练过程记录 目录 训练控制台显示 输出结果文件 训练控制台显示 输出结 ...
最新文章
- 解决Redis报错:MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist
- 刚输一行代码就报5次假漏洞,npm让程序员们累觉不爱
- c语言 memset 段错误,段错误之memset对类对象的误用
- c++ opencv imencode imdecode string转换
- windows php swoole 安装
- SPI配置8通道ADC128S022
- 交互神器 Facebook Origami
- c ++ 函数的esp指针_在C ++中通过指针访问成员函数
- 深入理解RocketMQ是如何做到高性能的?
- c中获取python控制台输出_linux c程序中获取shell脚本输出的实现方法
- HDU1231 最大连续子序列【最大子段和】
- 清华同方计算机教程,清华同方电脑u盘重装系统win10教程
- html组合标题,如何组合标题关键词(影响标题的5个因素)
- spring定时器时间表达式 Quartz中时间表达式的设置
- installshield 软件使用教程
- 使用WPF设计类似Visio的简单绘图软件
- 苦难是人生最大的财富
- 理解实时音视频聊天中的延时问题一篇就够
- 小米max3支持html吗,小米Max3这款手机是否有OTG功能,支持OTG鼠标和U盘吗?
- tsf定时任务迁移到xxl-job