C++基础

目录

什么是C++:

 命名空间:

命名空间的定义:

 命名空间还可以嵌套:

缺省参数:

函数重载:

引用:


什么是C++:

C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度
的抽象和建模时,C语言则不合适。为了解决软件危机, 20世纪80年代, 计算机界提出了OOP(object
oriented programming:面向对象)思想,支持面向对象的程序设计语言应运而生。
1982年,Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念,发明了一种新的程序语
言。为了表达该语言与C语言的渊源关系,命名为C++。因此:C++是基于C语言而产生的,它既可以进行C语
言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行面向对象的程
序设计。
 

既然我们已经初步的了解了C++这个熟悉又陌生的程序语言,那么我们开始进行C++第一节的学习。

 命名空间:

在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字
污染,namespace关键字的出现就是针对这种问题的。
 

命名空间的定义:

//1. 普通的命名空间
namespace N1 // N1为命名空间的名称
{
// 命名空间中的内容,既可以定义变量,也可以定义函数
int a;
int Add(int left, int right)
{
return left + right;
}
}

 命名空间还可以嵌套:

namespace N2
{
int a;
int b;
int Add(int left, int right)
{
return left + right;
}
namespace N3
{
int c;
int d;
int Sub(int left, int right)
{
return left - right;
}
}
}

既然讲了那么多例子,那么我们用一个小例子更加生动的来体现一下命名空间的作用。

当我们定义一个变量并且为其命名时,恰好命名与库函数中的函数名字一样,那么编译器就会报错,因为命名冲突,那么怎么使用命名空间来很好的避免这种情况的发生呢。

#include<stdio.h>
{
    int printf=1;
}

像上面这个代码就会出错,因为printf为<stdio.h>中的输出函数,这时我们就可以用命名空间来定义这个printf。

namespace N1
{
    int printf=0;
     //可以对命名空间里面的变量进行初始化和定义但是不能赋值
    b=20;//这样就是错误的
}

但是只是这样是不够的,因为除了定义的时候有规定,使用的时候也有规定。

如果想在namespace外改变和使用printf的值 就可以用下列方法。

N1::printf=3;//修改printf变量的值

如果我们在一个命名空间中有多个变量那么我们不必在每次使用时加限定符,我们可以在代码的前几行用using进行展开 比如

using N1::printf;

如果想把N1中的所有变量展开则可以使用全部展开的方法

using namespace N1;

命名空间的使用场景

1. 在公司中难免会有人代码中有相同的变量名,此时就可以使用命名空间。

2.必须使用与库函数中函数名一样的变量。

用C++向世界问好:

既然C语言刚开始就一个HELLO WORLD 那我们用C++也可以进行实现简单的输出操作。

#include<iostream>
using namespace std;
int main()
{
    cout<<"Hello world !"<<endl;
    return 0;
}

在使用cout输出的时候和cin输入的时候,必须加上<iostream>库和std标准命名空间。

我们在学习c语言的时候,当输出不同类型的数值时我们要使用不同的%d,%f,%lf。但是我们使用c++输出的时候可以不用加这些,而且不用规定位数,cout会自动分配。比如

double i=1.47;
cout<<i<<endl;

这样也可以看出c++相较于c语言的便利之处。

缺省参数:

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

int fun(int c=0)
{
    return c;
}

像这种函数,括号里面给c定义并且赋值了,如果传参的时候并没有给c传值,那么就使用函数给的默认值,如果指定了参数的值了那么就使用指定的值。

fun()//使用默认值
fun(20)//使用指定的值

 缺省也分全缺省与半缺省。

全缺省就是如下代码

int fun(int a=1,int b=2,int c=3)

但是以下我们调用的方式都是正确的

fun();
fun(1);
fun(1,2);
fun(1,2,3);

当实参把数值传进去的时候是从左往右依次传的,并且不能跳着传,也就是必须按顺序传。

半缺省就是将参数部分初始化

int fun(int a,int b=20,int c=30)

注意:
1. 半缺省参数必须从右往左依次来给出,不能间隔着给
2. 缺省参数不能在函数声明和定义中同时出现


函数重载:

函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的
形参列表(参数个数 或 类型 或 顺序)必须不同,常用来处理实现功能类似数据类型不同的问题
比如像下面的两个同名函数就是满足函数重载。

int fun(int a,int b)
{
    return a+b ;
}
float fun(float a,float b)
{
    return a+b ;
}

虽然C++中满足函数重载,但是C语言中却不满足,因为在编译的过程因为同名函数没办法区分。而C++是通过函数修饰规则来区分,只要参数不同,修饰出来的名字就不一样,就支持了重载。至于更深的理解,在这里我们不过多的讲述。

引用:

引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。

我们用一个代码的例子来首先认识一下引用这个东西。

#include<iostream>
using namespace std;
void Swap(int& x, int& y)
{
	int temp = x;
	x = y;
	y = temp;
}
int main()
{
	int x = 20;
	int y = 10;
	Swap(x, y);
	printf("x=%dny=%d", x, y);
	return 0;
}

当我们想使用一个函数来交换两个数的位置的时候,不仅可以使用指针来实现,引用也可以很好的实现,并且比指针好理解。

注意

1. 引用在定义时必须初始化
2. 一个变量可以有多个引用
3. 引用一旦引用一个实体,再不能引用其他实体
 

当我们引用一个被const修饰的变量的数时需要注意

void TestConstRef()
{
const int a = 10;
//int& ra = a; // 该语句编译时会出错,a为常量
const int& ra = a;
// int& b = 10; // 该语句编译时会出错,b为常量
const int& b = 10;
double d = 12.34;
//int& rd = d; // 该语句编译时会出错,类型不同
const int&= d;
}

我们可以理解为const修饰变量后,如果不用const来修饰引用的变量,编译时会出错的,因为权限变小了。当我们没用const修饰变量时,而用const修饰引用的变量时,权限变大了,所以可以。

后面还有做参数

void Swap(int& left, int& right)
{
int temp = left;
left = right;
right = temp;
}

做返回值

int& Count()
{
static int n = 0;
n++;
// ...
return n;
}

今天的c++基础就讲到这里,下次会更新最新的学习动态,谢谢大家。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>