前言:本笔记所对应的课程为中国大学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. bzoj 3551

    按照困难度升序排序Kruskal重构树这样一来一个点的子树中的所有困难值都小于改点的困难值对于每次询问倍增找出困难值最大且小于x的点该点的子树中的第k大就是询问的答案主席书维护区间k大 #includ ...

  2. 【luogu1797】faebdc的烦恼-莫队

    题目背景 鸟哥(faebdc)自从虐暴NOIP2013以来依然勤奋学习,每天上各种OJ刷题,各种比赛更是不在话下.但这天他遇到了一点小小的麻烦……在一届“Orz鸟哥杯”上,题目是在是太多了!足有n道! ...

  3. codeforces#1215E. Marbles(状压dp)

    题目链接: http://codeforces.com/contest/1215/problem/E 题意: 至少多少次操作可以使得相同的数都是相邻的 每次操作可以交换两个相邻的数 数据范围: $1\ ...

  4. springboot之搭建第一个helloworld程序

    1.下载基本框架 在网站:https://start.spring.io/ 全部默认,基本没有改动 选择依赖,当然也可以自己在pom.xml加,我们直接在这里选择. 只选择Spring Web Sta ...

  5. PyTricks-How to Sort a Python dict

    字典的键值排序 import operator # 1表示按照值排序 xs = {"a": 4, "b": 3, "c": 2, " ...

  6. pwn学习日记Day10 《程序员自我修养》读书笔记

    第一章 从 Hello world 说起 抛出问题: 1.程序为什么要被编译器编译后才能执行? 2.编译器在把C语言程序转换成可以执行的机器码的过程中做了什么,怎么做的? 3.最后编译出来的可执行文件 ...

  7. fastadmin 增加外键表搜索

    1.老规矩,先上效果图  (例子:https://ask.fastadmin.net/question/1035.html) 2.  关键字眼  selectpage

  8. 重新部署环境之后,总是提示表doesn't have a default value

    SQLSTATE[HY000]: General error: 1364 Field 'college' doesn't have a default value   数据库严格模式开启了,解决方法: ...

  9. ccf 201803-3 URL映射(python)

    使用正则表达式 import re import collections n, m = list(map(int, input().split())) arr = ['']*(m+n) for i i ...

  10. [java]察看两个日期间差多少秒/小时/天

    Java 中Date类getTime()的方法返回从1970-1-1以来的毫秒数,这是下面函数运行的基础. package com.example.demo; import java.text.Par ...