前言:本笔记所对应的课程为中国大学mooc中北京大学的程序设计与算法(三)C++面向对象程序设计,主要供自己复习使用

第一章 从c到c++

引用

  1. 定义引用时一定要将其初始化成某个变量
  2. 引用从一而终,引用一个变量后不可再引用另一个变量
  3. 只能引用变量
  4. 引用可以作为函数的返回值
  5. 常引用,在前面加关键字const,不能用过常引用去修改其引用的内容,但是可以通过直接修改引用内容的方式修改
  6. 常引用和引用不是同一种类型。引用可以赋值给常引用,常引用和常量不可以赋值给引用。

总结:将引用想象成变量的别名,可更好的理解其性质。

示例:

//引用作为参数的实例。可实现和指针类似的效果,达到在函数中改变传入变量的目的
//交换函数的写法
void swap(int & n1, int & n2){
int temp;
temp = n1;
n1 = n2;
n2 = temp;
} //引用作为函数返回值的实例。可以将变量传回,而不是仅传回一个值
int & get(int * a, int i){
return a[i];
} int main(){
int * a = {1, 2, 3};
get(a, 1) = 10;
cout << a[1] << endl;
//此时输出的值为10
}

const关键字

  1. 用法一:定义常量const int const double
  2. 用法二:定义常量指针const int * 同样的,不可以通过常量指针修改其指向的内容,但是可以改变指针的指向;不可以把常量指针赋值给非常量指针,反之可以。
  3. 用法三:定义常引用
  4. 将常量指针设为函数参数,可避免函数内部不小心改变参数指针所指的内容。

动态内存分配

  1. new用法一:分配一个变量 P = new T;,意为:P是一个T型指针,分配一块sizeof(T)大小的内存空间,然后将其起始地址赋值给P。
  2. new用法二:分配一个数组 P = new T[N];,意为:N是要分配的数组元素的个数,可以是表达式。
  3. new运算符返回值T *
  4. delete用法一:delete P;,P是一块new分配出的存储空间
  5. delete用法二:delete [] P;
  6. 一块储存空间不能被delete两次及以上

内联函数

为减少函数调用的开销(主要是为减少语句很少且调用次数很多的函数的调用开销),引入函数内联机制,实际运行时直接将函数体语句块插入调用语句处。使用inline关键字定义内联函数。

示例:

inline int max(int a, int b){
if(a > b) return a;
return b;
}

函数重载

多个函数名字相同,参数个数参数类型不同,叫做函数重载。用法同java中的重载,不再赘述。

再次强调,两个函数参数表完全相同,只是返回值不同,不叫函数重载。

函数缺省参数

定义函数时可以让最右边的连续若干个参数有缺省值,调用时若省略最右边连续若干个参数,则使用其对应的缺省值。

意义在于提高程序的可扩充性。

示例:

void func(int a, int b = 1, int c = 2);
func(10);
func(10, 3);
func(10, , 8);

其中第一个等价于 func(10, 1, 2);

第二个等价于func(10, 3, 2);

第三个错误,只能从右边开始连续缺省

对象与类

由于学过java,因此这里只记录与java不同的地方。

类与对象的用法有三种:

第一种同java。

第二种是指针->成员名的形式。

示例:

Circle c1, c2;
Circle * p1 = & c1;
Circle * p2 = & c2;
p1->w = 5;
p2->Init(5, 4);

第三种是引用名.成员名的形式。

示例:

Circle c;
Circle & cc = c;
cc.w = 5;
cc.Init(5, 4);

c++学习笔记_1的更多相关文章

  1. PythonI/O进阶学习笔记_1.抽象、面向对象、class/object/type

    前言: 是自己在学习python进阶IO学习视频的时候的理解和笔记,因为很多都是本菜鸟学习时候的自己的理解,有可能理解有误. Content: - 抽象的概念和面向对象的概念?想要大概了解python ...

  2. Sep19_html/css_imooc学习笔记_1

    1. <h1></h1>标题,h1-h6从大到小 2. <p></p> 段落 3. <img src=“1.jpg”> 加入图片 4.基本结 ...

  3. springmvc 学习笔记_1

    一.回顾JavaWeb中的MVC设计模式 1)MVC这种设计模式,不光运用于Web领域,而且也能用于非Web领域 2)今天说的MVC特指一种表现层设计模式,不限于Java语言 二.回顾struts2+ ...

  4. servlet学习笔记_1

    一.动态页面和静态页面 动态页面&静态页面:如果浏览器在不同时刻不同条件下访问web服务器的某个页面,浏览器所获得的页面内容会发生变化,那么这种页面称之为动态页面.动态页面和静态页面的区别在于 ...

  5. Java编程思想学习笔记_1(Java内存和垃圾回收)

    1.Java中对象的存储数据的地方: 共有五个不同的地方可以存储数据. 1)寄存器.最快,因为位于处理器的内部,寄存器按需求分配,不能直接控制. 2)堆栈.位于通用RAM,通过堆栈指针可以从处理器那里 ...

  6. 《MySQL必知必会》学习笔记_1

    #选择数据库 USE mysql #返回可用数据库列表 SHOW DATABASES #返回当前数据库中可用表 SHOW TABLES #返回表列 SHOW COLUMNS FROM db #显示特定 ...

  7. Python学习笔记_1

    一.基础知识 1. 基础: 数据结构:常量.变量.元组(列表).字典 数据类型:int float str 算法:分支和循环 面向对象:类.属性.方法 封装.继承.多态 2. python语言的特点: ...

  8. javascript学习笔记_1

    1.JSON的遍历 for(var i in json){  alert(json[i]; }2.arguments 可以理解为是一个数组,并且建有json的部分能力 css(obj,attr,val ...

  9. spark学习笔记_1

    简单的讲,Apache Spark是一个快速且通用的集群计算系统. Apache Spark 历史: 2009年由加州伯克利大学的AMP实验室开发,并在2010年开源,13年时成长为Apache旗下大 ...

随机推荐

  1. JQuery 实践---创建元素包装集

    1. 利用选择器,选择将被JQuery包装的元素 标识和选择DOM元素.JQuery采用我们已经知道的CSS语法并且扩展了一些.为了利用JQuery来选择元素,请把选择器包装在$()中. 基本CSS选 ...

  2. SIGAI深度学习第六集 受限玻尔兹曼机

    讲授玻尔兹曼分布.玻尔兹曼机的网络结构.实际应用.训练算法.深度玻尔兹曼机等.受限玻尔兹曼机(RBM)是一种概率型的神经网络.和其他神经网络的区别:神经网络的输出是确定的,而RBM的神经元的输出值是不 ...

  3. java http 上传文件夹

    用JAVA实现大文件上传及显示进度信息 ---解析HTTP MultiPart协议 (本文提供全部源码下载,请访问 https://github.com/1269085759/up6-jsp-mysq ...

  4. redis数据存储--redis在Windows下的安装过程

    一.下载软件 1. 下载Redis windows版本,Redis官网下载地址为:https://redis.io/download: 这里下载的是Windows版本,下载地址为:https://gi ...

  5. python的openpyxl的使用笔记

    openpyxl模块介绍 openpyxl模块是一个读写Excel 2010文档的Python库,如果要处理更早格式的Excel文档,需要用到额外的库,openpyxl是一个比较综合的工具,能够同时读 ...

  6. vue后台_登录权限

    登录权限控制包含着这么几个方面的含义: 1)不同的权限对应不同的路由 2)侧边栏需要根据不同的权限,异步生成 登录:使用用户名和密码,登录成功后返回用户的token(防止XSS攻击),将此token存 ...

  7. PYTHON -----pyinstaller的安装

    这几天一直在安装pyinstaller库,发现了一个好方法 因为一直使用pip安装,我只能介绍一下pip安装pyinstaller的方法的注意事项 1:一般pip会在安装python的Scripts文 ...

  8. the requested PHP extension dom is missing from your system

    composer  出错 the requested PHP extension dom is missing from your system 解决办法    yum install  php70w ...

  9. 【SpringBoot】整体下载大文件与分批下载大文件(利用MySql数据库的Limit实现)

    在前文里谈过一次性从数据库取一个大结果集有可能导致outofMemory,当时的想法是分批去取回来,今天把它实现了,特地把代码分享出来: 工程下载:https://files.cnblogs.com/ ...

  10. AlarmManager(闹钟服务)

    1.Timer类与AlarmManager类区别: 对Timer就是定时器,一般写定时任务的时候 肯定离不开他,但是在Android里,他却有个短板,不太适合那些需要长时间在后台运行的 定时任务,因为 ...