C++基础语法

目录

1.1 概念:

1.2 典型的C++程序结构

1.3 新的数据类型

① bool类型

1、目的:

2、取值:

3、特点

② 引用类型

1、概念:

2、语法格式:

3、特点:

1) 引用不占内存,必须初始化

2) 引用只能初始化一次,后续不能再充当别的变量的引用

3) 不存在多级引用

4)可以给指针变量起别名

5) 不存在引用数组

 6) 可以对函数进行引用

7) 引用的类型和所引用的变量的类型需要完全一致 

8) 不存在void类型的引用

1.4 引用的特殊使用

①引用充当函数实参

②引用充当函数的形参

③引用充当函数的返回值

1.5 作用域及可见性问题

1.5.1 作用域

① 函数原型作用域

② 局部作用域

③ 全局作用域

④ 类作用域

⑤ 命名空间作用域

1.5.2 可见性


1.1 概念:

C++语言是一门高级编程语言,它完全兼容了C语言的语法,并且有自己的全新的语法规则。

C++语言更加适合于大型的应用软件的设计,相对而言C语言更加适合于底层业务逻辑软件设计和

数据处理软件设计,以及于硬件交互的驱动程序软件设计。

1.2 典型的C++程序结构

一个C++程序的源代码文件是以 .cpp 为结尾的。

①Linux下C++的程序结构及编译过程:

完全兼容C语言的形式

C++特定语法形式:

编译:

1.3 新的数据类型

① bool类型

1、目的:

用于存储真假值

2、取值:

          true   false 

            1       0

3、特点

该变量的大小占 1 byte 空间。

同C语言一样,非0即真。给OK赋值-199,输出的值是:1。

#include <iostream>
using namespace std;
//布尔类型变量大小:1 byte
//#if 0
int main()
{
	bool ok;
	cout << sizeof(ok) << endl;// "\n";
	ok = true;//ok=-199;
	cout << ok << endl;
	return 0;
}
//#endif

② 引用类型

1、概念:

不占用内存空间,用于充当变量的别名

2、语法格式:

初始化 :    数据类型& 变量名 = 变量      (必须初始化引用)

3、特点:
1) 引用不占内存,必须初始化
2) 引用只能初始化一次,后续不能再充当别的变量的引用
#include <iostream>
using namespace std;
//#if 0
int main()
{
	int a = 100;
	int b = -399;
	int& pa = a;
	pa = b;
	cout << pa << endl;
	cout << a << endl;	
}
//#endif

 

3) 不存在多级引用
#include <iostream>
using namespace std;
//#if 0
int main()
{
	int a = 100;
	int b = -399;
	int& pa = a;
	int& paa = pa;
	cout << paa << endl;
	paa = 101;
	cout << a << endl;
	cout << sizeof(paa) << endl;
	return 0;
}

 int& paa = pa; 还是给 a 取别名,所以 paa 就是 a 的值:100;

给 paa 赋值 101 ,就是给 a 赋值,所以 a 的值是:101。

cout << sizeof(paa) << endl;   实质上是求 a 的大小,所以结果是:4。

4)可以给指针变量起别名

int* &paa = pa;   代表:int* 类型的pa,取别名为 paa。注意:与&取地址区分。

//给指针变量起别名
int main()
{
	int a = 100;
	int * pa = &a;
	int* &paa = pa;
	cout << pa << "," << paa << "," << &a << endl;
	return 0;
}

5) 不存在引用数组

可以给一个数组起别名,

//对于数组的引用
int main()
{
	int arr[] = { 1, 2, 3, 4, 5 };
	int (&pArr)[5] = arr;
	int i;
	for (i = 0; i < 5; i++){
		cout << pArr[i] << endl;
	}

	cout << sizeof(arr) << endl;
	cout << sizeof(pArr) << endl;

	return 0;
}

不允许使用引用的数组:

错误写法: int& arr[5] = { pa, pb, pc, pd, pe };

因为引用不占内存,区分不了数组中第0个元素和第1个元素,引用不占空间,都是别名。

 //不存在引用数组  
int main()
{
	int a, b, c, d, e;
	int& pa = a;
	int& pb = b;
	int& pc = c;
	int& pd = d;
	int& pe = e;
	int& arr[5] = { pa, pb, pc, pd, pe };
	return 0;
}
//错误代码

 6) 可以对函数进行引用

函数指针:指向函数的指针变量。

格式:void(*pFun)(int) = Fun;   或如下:

int (*func_ptr)(int, int);

 存在对函数的引用:

void Fun(int x)
{
	cout << "this is a function " << x << endl;
}
int main()
{
	//void(*pFun)(int) = Fun;
	//pFun(100);
	void(&fFun)(int) = Fun;
	fFun(99);
	return 0;
}

7) 引用的类型和所引用的变量的类型需要完全一致 

不一致会报错。

8) 不存在void类型的引用

void 泛型变量,不存在。

void* 类型指针可以接受任意类型的变量,所以 void& px = a; 不存在。

1.4 引用的特殊使用

①引用充当函数实参

实际上就是将变量本身充当了实际参数

#include<iostream>
using namespace std;
void Fun(int x, int y)
{
	++x;  
	++y;
	cout << "Fun:" << x << "," << y << endl;
}
int main()
{
	int a, b;
	a = 88;
	b = 78;
	int& pa = a;
	int& pb = b;
	Fun(pa, pb);//引用充当函数的实参,实际上存储的事变量本身 89 79
	cout << a << "," << b << endl;
	return 0;
}

 

②引用充当函数的形参

实际上间接修改了实际参数

形参是引用说明 x 和 y在调用时是实参的别名,对 x、y 进行操作,就是对实参进行操作。

#include<iostream>
using namespace std;
void Fun(int& x, int& y)
{
	++x;
	++y;
	cout << "Fun:" << x << "," << y << endl;
}
int main()
{
	int a, b;
	a = 88;
	b = 78;
	//int& pa = a;
	//int& pb = b;
	Fun(a, b);
	cout << a << "," << b << endl;
	return 0;
}

 

③引用充当函数的返回值

返回了变量的空间本身,因此函数此时可以充当左值

#include <iostream>
using namespace std;
//函数的返回值是引用,则意味着返回了变量的空间本身,因此函数此时可以充当左值
int& Fun()
{
	static int x = 899;
	cout << x << endl;
	return x;
}
int main()
{
	//int res;
	//res = Fun();
	//cout << res << endl;
	
	Fun() = 900;
	Fun();
	return 0;
}

1.5 作用域及可见性问题

1.5.1 作用域

① 函数原型作用域

函数声明时,形式参数变量的作用范围

② 局部作用域

函数内部以及语句块内部的变量作用范围

  • 在函数内部或代码块内部声明的变量具有局部作用域。
  • 它们只在声明它们的代码块内有效。
③ 全局作用域

变量能够在整个程序的任意位置使用

  • 在所有函数外部声明的变量和函数具有全局作用域。
  • 它们在整个程序中都是可见的,只要没有被同名局部变量覆盖。
④ 类作用域

类中声明一个成员变量或成员函数时,这些成员的名称就被限定在了该类的作用域内。

⑤ 命名空间作用域

为了解决命名危机问题,提供给用户能够自定义名称一个作用域的范围(大于局部作用域,小于全局作用域)

  • 命名空间用于防止名称冲突,并控制标识符的可见性。
  • 使用namespace关键字定义命名空间。

语法格式

namespace 命名空间名称

{   

}

运算符:   作用域区分符  ::

     命名空间名::变量/函数

#include <iostream>
using namespace std;//使用标准命名空间
namespace Shaanxi
{
	namespace XA{
		int num = 98;
		void Fun()
		{
			std::cout << "Xian function" << std::endl;
		}
	}
	namespace BJ
	{
		int num = 85;
		void Fun()
		{
			std::cout << "Baoji function" << std::endl;
		}
	}
}
using namespace Shaanxi;
using Shaanxi::XA::Fun;
int main()
{
	Fun();
	//std::cout << XA::num << endl;
	BJ::Fun();
	//cout << Shaanxi::XA::num << endl;
	//Shaanxi::BJ::Fun();

	return 0;
}

 

1.5.2 可见性

C++中的可见性主要由访问修饰符(如publicprotectedprivate)和命名空间(Namespace)控制。

在指定的作用域内,一个变量或操作数能否被识别。

访问修饰符

  • public:成员在类外部可见。
  • protected:成员在类及其派生类中可见。
  • private:成员仅在类内部可见。
  • 总结

  • 作用域决定了标识符在代码中的有效范围。
  • 可见性决定了标识符在代码中的可访问性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值