初入C++

一.C++简介

我们都知道C语言是过程性语言(强调的是实现过程),即对计算机语言要处理的两个概念:数据和算法中的算法进行实现,但是C语言在面对大型程序时还是有所不足,因此出现了C++语言,它具有以下三种编程方式:1.C语言代表的过程性语言 2.添加的类代表的面向对象语言 3.C++支持的泛型编程,C++语言与C语言不同,它主要是强调数据,C++的优点:可以方便重用和修改现有的和经过测试的代码。

当然C++的故事远不止于此,大家可以自行去了解,我们还是以编程知识学习为主。

二.C++头文件与C对比

//C语言头文件
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
//C++头文件
#include <iostream>
#include <cmath>
#include <cstdlib>

对于#include我们都知道这是编译指令,将文件内容添加到程序中

下面我们重点放在对比两种语言头文件不同上:

1.C++任然可以使用C库函数,对于C语言头文件形式还是可以支持,但是我们最好将其改成C++风格,有以下两点改动:1.C++头文件以c(小写)开头(C标准库改动)2.去掉.h

2.C++也有自己的专属头文件,与C无关,如:#include <iostream>

三、命名空间

我们在进行C语言或C++的练习中总是会起各种各样的名字,有时甚至会为了起名字而犯愁,所以在C++中引入了命名空间的概念,它的出现就是为了避免出现命名的冲突,现在我们来学习一下:

  

命名空间内可以定义变量,函数,也可以嵌套定义,基本结构如下:

namespace abc  //abc 是命名空间的名字 由自己定义
{
   //这里面由自己定义类型,比如我定义的
   int n = 1;
   void Swap(int&a,int&b)
   {
       int t=b;
       b = a;
       a = t;
   }
}

使用命名空间有三种方式:

1.直接展开命名空间

using namespace abc

abc是命名空间的名字,是自己随便起的,要是有相同名字的命名空间,比如又定义了一个abc,会合并成一个空间。

2.使用using将命名空间中某个成员引入

using abc::a

例如我引入的是一个int 类型的变量a,::是作用域限定符

3.加命名空间和作用域限定符

namespace abc
{
   int a = 1;
}
abc::a

这时候我们就可以在命名空间的外部使用命名空间abc里的a了

四、C++的输入&输出

  C++定义了新的输入和输出,输入是cin,输出是cout,但是使用时要展开C++官方的命名空间

using namespace std ,例如:

#include<iostream>
using namespace std;
int main()
{
	int a ;
	cin >> a;
	cout << a << endl;
	return 0;
}

使用cin和cout输入输出非常方便,不需要控制格式了,cin和cout可以自动识别类型,关于更加复杂的知识我们后面了解,这里简单使用一下输入输出。

五、缺省参数

缺省参数的定义

   缺省参数是声明或定义函数时为函数的参数指定一个缺省值,在调用这个函数时,如果实参没有指定的函数值,就采用该缺省参数。

第一个fun()函数,没有指定实参的值,则默认使用形参的缺省值,第二个fun()函数,实参是20,那么就用实参的值。

缺省参数的分类

全缺省参数

void Func(int a = 10, int b = 20, int c = 30)
 {
     cout<<"a = "<<a<<endl;
     cout<<"b = "<<b<<endl;
     cout<<"c = "<<c<<endl;
 }

半缺省参数

void Func(int a, int b = 10, int c = 20)
 {
     cout<<"a = "<<a<<endl;
     cout<<"b = "<<b<<endl;
     cout<<"c = "<<c<<endl;
 }

值得注意的是:

1.半缺省参数只能从右往左依次定义,不能间隔着给

2.缺省参数不能在函数定义和声明中同时出现,比如:

  //a.h
  void Func(int a = 10);
  
  // a.cpp
  void Func(int a = 20)
 {}
  
  // 注意:如果声明与定义位置同时出现,恰巧两个位置提供的值不同,那编译器就无法确定到底该用哪个缺省值。

3.缺省值必须是常量或全局变量

4.C语言不支持

六、函数重载

重载的概念

函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数或类型或类型顺序)不同,常用来实现功能类似但数据类型不同的问题。

int Add(int a, int b)
{
	return a + b;
}
int Add(double a, double b)
{
	return a + b;
}
int Add(double a, int b)
{
	return a + b;
}
int Add(int a, double b)
{
	return a + b;
}
int Add(double a, double b,int c)
{
	return a + b+c;
}
int main()
{
	cout << Add(10, 20) << endl;
	cout << Add(10.5, 20.5) << endl;
	cout << Add(10.5, 20) << endl;
	cout << Add(10, 20.5) << endl;
	cout << Add(10.5, 20.5,30) << endl;
 
	return 0;
}

这些都是同名函数,但都是函数重载。

当然,有时候构成函数重载了,但在编译时仍然会报错,例如:

这个时候虽然构成函数重载了,但是在调用时发生了不知道应该调用哪一个函数的情况,就会报错,所以大家在写的时候一定要注意。

C++支持函数重载的原理——名字修饰

为什么C++支持函数重载,而C语言不支持函数重载呢?

在C/C++中,一个程序的运行需要经过以下几个阶段:预处理,编译,汇编,链接

 1.实际上 项目通常是由多个头文件和源文件组成的,当a.cpp中调用b.cpp中的add函数时,编译后连接前,a.o的目标文件中没有add函数的地址,因为add是在b.cpp中定义的,所以add的地址在b.cpp中,

2.  链接器看到a.o调用add,但是没有add的地址,就会到b.o的符号表中去找add的地址,然后链接到一起,

3.但是链接器会使用哪个名字去找呢?这里每个编译器都会有自己的函数名修饰规则。具体的up主就噶了(我也不会了,更加深入了,以后慢慢了解)

4.通过这里就理解了C语言没办法支持重载,因为同名函数没办法区分。而C++是通过函数修饰规则来区分,只要参数不同,修饰出来的名字就不一样,就支持了重载。

5.如果两个函数函数名和参数是一样的,返回值不同是不构成重载的,因为调用时编译器没办法区分了。

  这次的C++初步学习就到这里了,感谢观看!

  • 15
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值