【第21期】观点:人工智能到底用 GPU?还是用 FPGA?

初识C++(一)

原创 2016年05月30日 13:35:07

1.C++的数据类型

基本数据类型:char,int,float,double,void,bool

非基本数据类型:数组,指针,结构体,联合,枚举,类


2.C++的命名空间


a.命名空间:定义了某些标识符的作用域,使得我们在使用同名全局变量时不发生冲突

eg:

		#include<iostream>
		using namespace std;//使用标准命名空间
		int main()
		{
			cout<<"hello poppy!"<<endl;
			return 0;
		}
		//在此程序里我们也可以不使用命名空间来调用cout和endl
		#include<iostream>
		int main()
		{
			std::cout<<"hello poppy!"<<std::endl;
			return 0;
		}

tips: "::"是作用域解析符,此处使用"::"唯一的标识了cout和endl隶属于std这个命名空间


b.自定义的命名空间

 在C++程序中,我们不仅可以使用标准的命名空间,也可以使用我们自定义的命名空间

 而自定义的命名空间的灵活性更大

 eg:

	  	#include<iostream>
	  	using namespace std;
	  	namespace myname
	  	{
	  		int a=10;
	  	}
	  	namespace Myname
	  	{
	  		int b=20;
	  	}
	  	namespace myname
	  	{
	  		int c=30;
	  	}
	  	using namespace myname;
	  	using namespace Myname;
	  	int main()
	  	{
	  		cout<<a<<endl;
	  		cout<<b<<endl;
	  		cout<<c<<endl;
	  		return 0;
	  	}
	 /*输出结果:10
	  	      20
	  	      30      */

 

         从上面程序可以看出命名空间可以拆分开来定义,我们在使用某个命名空间中所定义的                  成员之前必须使用using namespace …… 或者 ……::


3.函数的重载

什么叫做函数的重载?

函数的重载允许我们定义多个相同函数名但参数列表不同的函数

	eg:
		#include<iostream>
	  	using namespace std;
	  	int add(int a,int b)
	  	{
	  		return a+b;
	  	}
	  	float add(float a,float b)
	  	{
	  		return a+b;
	  	}
	  	int main()
	  	{
	  		int num1 = 2;
	  		int num2 = 3;
	  		float num3 = 2.2;
	  		float num4 = 4.3;
	  		int ret1 = add(num1,num2);
	  		float ret2 = add(num3,num4);
	  		cout<<ret1<<endl<<ret2<<endl;
	  		return 0;
	  	}

  输出结果:5

   6.5


从上面程序我们可以分析出在我们调用函数时,不需要考虑调用的是什么函数,而由编译器在              根据参数列表

对函数进行重命名之后,根据我们所传的实参类型来判断应该使用哪个函数,所以重载函数的              参数列表必须不同

否则,编译器将无法决定应该调用哪个函数!


4.缺省参数

  在C++程序中,我们允许在函数具有默认参数时缺省实参的形式,缺省参数又分为全缺省和部分缺省

a.全缺省参数

eg:

		int add(int a = 1,int b = 2)
		{
			return a + b;
		}
		int main()
		{
			cout<<add()<<endl;
			cout<<add(2)<<endl;
			cout<<add(2,3)<<endl;
			return 0;

		}

输出结果:3

 4

 5

观察结果,我们不难发现,当我们没有传参时函数默认使用 1,2作为参数,当我们传一个参数              时,我们实际上覆盖了a的默认值,而当我们传2个参数时,函数使用我们所传参数作为实参。


b.部分缺省参数

eg:

	int add(int a ,int b = 2)
		{
			return a + b;
		}
		int main()
		{
			cout<<add(3)<<endl;
			cout<<add(3,4)<<endl;
			return 0;

		}

输出结果:5

 7


    同全缺省参数,部分缺省参数也允许我们在函数提供默认参数时使用它的默认参数而不重新传         

值得注意的是,函数的默认参数必须连续地出现在参数列表的右边,因为参数的覆盖总是从左               往右进行的!


5.引用


a.引用的定义

引用类似于我们给变量起了一个别名。

eg:

			int m = 3;
			int &n = m;
			//此时n的值就是3,它们的内容相同,存放地址也相同


b.引用和指针

指针引用
可以为NULL必须为有效值
可以随时改变所指向的对象在创建时确定,引用的对象永不改变
sizeof确定的大小永远确定
sizeof确定引用的对象的大小
“++”“--”指针发生偏移
“++”“--”引用对象的内容改变
保存了所指向对象的地址引用即原来的变量的别名


c.函数的引用调用

eg:

                void swap(int &a,int &b)
		{
			int tmp = a;
			a = b;
			b = tmp;
		}
		//此程序可以成功的交换两实参的内容

通过上面的程序可以看出引用调用为我们提供了不少便利之处,它使我们的程序更加的简洁

又能够实现和指针相同的效果而避免许多指针存在的问题


tips:函数的返回值也可以是引用,但你必须保证当你返回了一个临时变量的引用时必须用一个

   已经创建好的变量来接收他。但通常我们不建议返回一个临时变量的引用。


d.const引用

eg:

		int m = 10;
		const int &n=m;
		n = 20;//该赋值语句将不会通过编译

请始终记得在C++里const被严格的定义为readonly 请不要试图改变由const修饰的值

我们常常使用 const 引用来保护函数中不允许被改变的参数

eg: void func(const int &a)

此时a的值不允许被改变


临时变量的引用需加const修饰

eg:

		double d = 3.14;
		const int &k=d;
		//如果必须引用一个临时变量请务必加上const修饰

        如果此时我们查看内存就会发现k和d并不存储于同一位置,因为k引用知识d在转化时                    生成的一个临时变量而非d本身


tips:引用常量必须加上const

eg:

		int &a = 5;//编译不能通过
		const int &a = 5;//正确


本文出自 “Zimomo” 博客,请务必保留此出处http://zimomo.blog.51cto.com/10799874/1738039

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

玩转Google开源C++单元测试框架Google Test系列(gtest)之一 - 初识gtest

作者:CoderZh(CoderZh的技术博客 - 博客园)出处:http://coderzh.cnblogs.com/一、前言本篇将介绍一些gtest的基本使用,包括下载,安装,编译,建立我们第一个...

【转】玩转Google开源C++单元测试框架Google Test系列(gtest)之一 - 初识gtest

原文地址:http://www.cnblogs.com/coderzh/archive/2009/03/31/1426758.html 一、前言 本篇将介绍一些gtest的基本使用,包括下载,安装,编译,建立我们第一个测试Demo工程,以及编写一个最简单的测试案例。 二、下载 如果不记得网址, 直接在google里搜gtest,第一个就是。目前gtest的最新版本为1.3.0,从下列地址可以下载到该最新版本: <a href="http://googletest.googlecode.c

2016/5/17 初识C++

2016/5/17 初识C++我是一名大二将近大三的学生,在之前的课程中陆续学习了C语言、Java和C#语言,当然,只是很简单的实用教程,在学习过程中,逐渐意识到编程注重的是算法,或许我说的也不准确。...

玩转Google开源C++单元测试框架Google Test系列(gtest)之一 - 初识gtest

一、前言 本篇将介绍一些gtest的基本使用,包括下载,安装,编译,建立我们第一个测试Demo工程,以及编写一个最简单的测试案例。 二、下载 如果不记得网址, 直接在google里搜gtest,第一个就是。目前gtest的最新版本为1.3.0,从下列地址可以下载到该最新版本: <a href="http://googletest.googlecode.com/files

玩转Google开源C++单元测试框架Google Test系列(gtest)之一 - 初识gtest

来源:http://www.cnblogs.com/coderzh/archive/2009/03/31/1426758.html一、前言本篇将介绍一些gtest的基本使用,包括下载,安装,编译,建立...

玩转Google开源C++单元测试框架Google Test系列(gtest)之一 - 初识gtest

一、前言 本篇将介绍一些gtest的基本使用,包括下载,安装,编译,建立我们第一个测试Demo工程,以及编写一个最简单的测试案例。 二、下载 如果不记得网址, 直接在google里搜gtest,第一个就是。目前gtest的最新版本为1.3.0,从下列地址可以下载到该最新版本: <a href="http://googletest.googlecode.com/files
  • wsql
  • wsql
  • 2011-08-29 13:08
  • 295

玩转Google开源C++单元测试框架Google Test系列(gtest)之一 - 初识gtest

http://www.cnblogs.com/coderzh/archive/2009/03/31/1426758.html总:http://www.cnblogs.com/coderzh/archi...

【转】玩转Google开源C++单元测试框架Google Test系列(gtest)之一 - 初识gtest

原文地址:http://www.cnblogs.com/coderzh/archive/2009/03/31/1426758.html 一、前言 本篇将介绍一些gtest的基本使用,包括下载,安装,编译,建立我们第一个测试Demo工程,以及编写一个最简单的测试案例。 二、下载 如果不记得网址, 直接在google里搜gtest,第一个就是。目前gtest的最新版本为1.3.0,从下列地址可以下载到该最新版本: <a href="http://goog

C++初识

1、编程的两种思想: (1) 面向过程的编程 -- C语言 (2) 面向对象的编程 -- C++/Java/C# 2、面向过程编程的三步: (1) 输入数据 (2) 对数据进行计算 ...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)