C++入门基础知识:类和引用

一.类(类的6个默认函数)、对象、面向对象等概念

1.cpp的数据类型(除去C中的)

基本数据类型:bool型 逻辑型              非基本型:类 class

void型 无类型

【1】命名空间(为了解决全局变量命名冲突的问题)

例:#include<iostream.h>

using namespace std;    //标准输入输出流,命名空间为std

int main()

{

cout<<‘‘hello world‘‘<<endl;     //cout和endl为对象,来自命名空间,若前面没有声明命名空间,则写为:std::cout<<”hello world“<<std::endl;

system(‘‘‘pause‘);

return 0;

}

可以随时向命名空间添加定义,但是都定义在同一命名空间

例:#inlcude<iostream.h>

namespace bit1      //定义一个命名空间

{

int a=0;

}

namespace bit2      //定义另一个命名空间

{

int a=20;

}

int main()

{

bit1::a=30;               //::为作用域解析符

bit2::a=40

}

2.输入/输出 流

cout →标准输出流对象,<<输出操作符;

cin→标准输入流对象,>>输入操作符;

endl→标准换行操作符;

3.函数重载

例:#include<iostream.h>

using namespace std;

int add(int num1,int num2)

{

return num1+num2;

}

float(float f1,float f2)

{

return f1+f2;

}

int main()

{

int num1=0;

int num2=0;

float f1=0.0;

float f2=0.0;

cin>>num1>>num2;

int ret=add(num1,num2);

cout<<"ret="<<ret<<endl;

cin>>f1>>f2;

float f3=add(f1,f2);

}

注意:【1】在同一作用域内,一组函数名相同,参数列表<个数/类型不同>不同,返回值类型可同可不同。

【2】判断函数是否重载时,只需要判断其函数名和参数列表是否相同即可。

【3】在c和cpp中,函数重载的规则不一样,所以在cpp中使用c的函数时要用extern ”c“。

4.缺省函数

【1】全缺省函数

例;int add1(int a,int b)

{

return a+b;

}

int main()

{

int ret=add1();      //此处可以不用写参数,若将其改为add1(3),则结果为3,原因是参数是从左往右填充的

return 0;

}

【2】半缺省函数

例:int add2(int a,int b=0)

二.指针与引用

引用的概念:【1】不是定义一个新的变量,而是给一个已经定义的变量赋予一个新的名字,且该变量可以被多次引用,即一个变量可以有多个别名;

【2】引用要进行初始化,要明确谁是谁的别名;

【3】引用可以传递,例如&q=m;&r=q;

【4】一个别名只能引用一个变量

1.const引用

例:#include<iostream.h>

using namespace std;

int main()

{

int *q=NULL;

const int *p=q;

int m=10;

const int &n=m;    //常引用,此时的n作为一个常量对待,不能直接修改n,只能通过修改m来修改

return 0;

}

注意:【1】不能将一个const修饰的变量赋给一个非const修饰的变量

【2】不能将一个常量直接引用,除非加上const,如const int &r=5

例:double b=3.14;

const int &k=b;

【3】在代码执行过程中,中间变量<临时>为常属性,则要用const来修饰。

2.引用用在函数参数中

例:#include<iostream.h>

using namespace std;

int swap(int *a,int *b)            //传指针的方式交换两个变量的值

{

int tmp=*a;

int *a=*b;

*b=tmp;

}

对于swap函数而言,还有另一种方法就是利用引用

例:void swap(int &a,int &b)

{

int tmp=a;

a=b;

b=tmp;

}

int main()

{

int a=10;

int b=20;

swap(a,b);

return 0;

}

3.常引用传参(当不希望函数内改变参数X的值的时候)

例:void ReadBigData(const BigData &x)

{

int a=x.arr[1000];

}

注意:返回值作为引用的时候,不能引用一个临时变量

例:int fun()

{

int ret=10;

return ret;    //这里返回了一个临时变量,最好不要这样写

}

4.值返回和引用反汇编

【1】值返回:将ret中的值放到eax寄存器中

汇编语言:Mov eax,dword ptr[ret];

【2】引用反汇编:将ret的地址放到eax中,和指针一样

汇编语言:Lea eax,[ret];

例:#include<iostream.h>

using namespace std;

①int add(int a,int b)

{

int ret=a+b;

return ret;

}

②int *add()

{

int ret=a+b;

return &ret;

}

③int &add(int a,int b)

{

int ret=a+b;

return ret;

}

以上三个add函数的功能是一样的。

引用和指针的区别和联系:

1.引用只能开始的时候初始化一次,后面便不能再指向其他变量;

2.引用必须指向有效变量,而指针可以为空;

3.sizeof引用指的是引用对象的大小,sizeof指针指的是对象地址的大小;

4.指针和引用的自增或自减的意义不一样;

5.相对而言,引用比指针更安全;

时间: 2024-10-10 08:26:40

C++入门基础知识:类和引用的相关文章

加解密入门基础知识

很多人都想学习解密,这东西刚入门时会让人沉迷进去,可以饭不吃.觉不睡.出现这种现像,也许是解密满足了人们的猎奇心里吧.但掌握这方面技术,对自身的 提高确实有好处.可以通过跟踪软件,提高自己的调试技能,并且能了解他人程序思路,使自己写出更好的程序.研究解密技术有助于掌握一些系统底层知识,系统 底层知识绝对是构造起大型软件的坚实基础.许多程序发展,都经历了这一锻炼过程的. 而大多数人可能认为解密是一门高深的学问.造成这种原因是以前这方面 的技术资料缺乏,从而将“解密”这一技能“神”化了.初学者一般不

linux入门基础知识及简单命令介绍

linux入门基础知识介绍 1.计算机硬件组成介绍 计算机主要由cpu(运算器.控制器),内存,I/O,外部存储等构成. cpu主要是用来对二进制数据进行运算操作,它从内存中取出数据,然后进行相应的运算操作.不能从硬盘中直接取数据. 内存从外部存储中取出数据供cpu运存.内存的最小单位是字节(byte) 备注:由于32的cpu逻辑寻址能力最大为32内存单元.因此32位cpu可以访问的最大内存空间为:4GB,算法如下: 2^32=2^10*2^10*2^10*2^2 =1024*1024*1024

USB入门基础知识(转)

源:USB入门基础知识 相关名词: 主机(Host) 设备(Device) 接口(Interface) 管道(Pipe) 管道是主机与设备端点数据传输的连接通道,代表了主机的数据缓冲区与设备端点之间交换数据的能力.管道包括数据流管道和消息管道. Such associations between the host software and a USB device endpoint are called pipes. 端点(Endpoint) 端点,实际上是设备硬件上具有一定大小的数据缓冲区.U

(转)2.4.1 基础知识--添加服务引用与Web引用的区别

<Web服务开发学习实录>第2章构建ASP.NET Web服务,本章我们将学习创建Web服务的各种方法,并重点对使用Visual Studio创建ASP.NET Web服务和修改Web服务的属性进行介绍.本节为大家介绍基础知识--添加服务引用与Web引用的区别. AD: 2.4.1  基础知识--添加服务引用与Web引用的区别 由于.NET Framework 4默认不再推荐Web服务,而是通过WCF来实现Web服务的功能.而.NET Framework 3.5两者都支持,因此在添加时存在一些

Java的入门基础知识

https://course.tianmaying.com/java-basic%2Bjava-environment#0 作者:David链接:https://www.zhihu.com/question/25255189/answer/86898400来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 这个教程将Java的入门基础知识贯穿在一个实例中,逐步深入,可以帮助你快速进入Java编程的世界.万事开头难,逐步跟着这个教程走一遍,对Java应该就会有一种入门的

React Native 入门基础知识总结

中秋在家闲得无事,想着做点啥,后来想想,为啥不学学 react native.在学习 React Native 时, 需要对前端(HTML,CSS,JavaScript)知识有所了解.对于JS,可以看看阮一峰老师的<ECMAScript 6 入门>这篇文章.里面涉及很多 ES6 的新特性.我之前也是看了阮老师的文章做了一些学习笔记 ES6 学习笔记. 1.环境搭建 环境搭建中文教程,点击跳转RN中文社区 :http://reactnative.cn/docs/0.40/getting-star

ffmpeg入门基础知识

获取ffmpeg源代码 如果你是在Windows环境下,则可以先装SVN的一个客户端TortoiseSVN(非常好用,强烈推荐),他安装完成后会集成在右键菜单中,点Checkout菜单,在弹出的界面中输入:svn://svn.mplayerhq.hu/ffmpeg/trunk,然后选择一个本地目录,按确定就可以把ffmpeg的源代码下载到你指定的目录中了. FFMPEG功能 视频音频格式转换 关于 frame的一些基本知识 帧速率 帧速率是每秒显示的图像数.标准影片(NTSC) 是29.97 帧

1)Linux程序设计入门--基础知识

1)Linux程序设计入门--基础知识 Linux下C语言编程基础知识 前言: 这篇文章介绍在LINUX下进行C语言编程所需要的基础知识.在这篇文章当中,我们将 会学到以下内容: 源程序编译 Makefile的编写 程序库的链接 程序的调试 头文件和系统求助 1.源程序的编译 在Linux下面,如果要编译一个C语言源程序,我们要使用GNU的gcc编译器. 下面我们 以一个实例来说明如何使用gcc编译器. 假设我们有下面一个非常简单的源程序(hello.c): int main(int argc,

NLP汉语自然语言处理入门基础知识介绍

NLP汉语自然语言处理入门基础知识介绍 自然语言处理定义: 自然语言处理是一门计算机科学.人工智能以及语言学的交叉学科.虽然语言只是人工智能的一部分(人工智能还包括计算机视觉等),但它是非常独特的一部分.这个星球上有许多生物拥有超过人类的视觉系统,但只有人类才拥有这么高级的语言. 自然语言处理的目标是让计算机处理或说"理解"自然语言,以完成有意义的任务,比如订机票购物或QA等.完全理解和表达语言是极其困难的,完美的语言理解等效于实现人工智能. 自然语言处理涉及的几个层次: 作为输入一共

框架 day65 Mybatis入门(基础知识:框架原理,入门[curd],开发dao层,全局与映射配置)

Mybatis 基础知识(一) 第一天:基础知识(重点) mybatis介绍 mybatis框架原理(掌握) mybaits入门程序(掌握) 用户信息进行增.删.改.查 mybatis开发dao层方法:(掌握) 原始dao开发方法(dao接口和实现类需要程序员编写) mapper代理开发方法(程序员只需要编写接口) SqlMapConfig.xml(mybatis全局配置文件)(掌握) mybatis输入映射(掌握) mybatis输出映射(掌握) mybatis动态sql(掌握)   1