C++入门

1、C++关键字

C++总计有63个关键字,C语言有32个关键字

asmdoifreturntrycontinue
outodoubleinlineshorttypedeffor
booldynamic_castintsignedtypeidpublic
breakelselongsizeoftypenamethrow
caseenummutablestaticunionwchar_t
catchexplicitnamespacestatic_castunsigneddefault
charexportnewstructusingfriend
classexternoperatorswitchvirtualregister
constfalseprivatetemplatevoidtrue
const_castfloatprotectedthisvolatilewhile
deletegotoreinterpret_cast

一些关键字的简要用途介绍

outo自动类型推导,根据变量初始化的值自动推导变量的数据类型
break跳出循环或switch语句
case在switch语句中用于定义不同的情况
char定义字符类型变量
const

定义常量,表示变量值不可更改

continue跳过当前循环,执行下一次循环
default在switch语句中定义默认情况
delete释放通过new操作符分配的内存
do定义一个循环
double定义双精度浮点数类型变量
else定义if语句中的else分支
enum定义枚举类型
explicit声明构造函数为显式,防止隐式类型转换
extern声明全局变量函数
float定义单精度浮点数类型
for

定义一个循环

friend声明友元函数或友元类
goto无条件跳转到标签处
if定义一个条件语句
inline定义内联函数,使函数直接插入调用点
int定义整形类型变量
long定义长整型类型变量
mutable修饰类中的成员变量,在常量对象中也可以修改
namespace定义命名空间
new在堆上分配内存
operator

定义运算符重载函数

private定义类的私有成员
protected定义类的受保护成员
public定义类的公共成员
register声明寄存器变量
return从函数中返回值
short定义短整形类型变量
signed定义有符号整数类型变量
sizeof 获取对象或类型的字节大小
static

定义静态变量、函数、类成员

struct定义结构体类型
switch定义一个多条件选择语句
template定义模板类或函数
this指向类的当前对象的指针
throw抛出异常
try定义异常处理快
typedef定义类型的别名
typeid获取类型信息
typename声明一个类型参数
union定义联合类型
unsigned定义无符号整数类型变量
using展开命名空间
virtual声明虚函数,实现多态性
void定义无返回值的函数或指针
volatile定义易变变量,表示变量值可能会被意外修改
dynamic_cast在继承关系中进行安全的类型转换
static_cast进行静态类型转换

2、命名空间

    命名空间是一种用于组织和管理代码的机制,它可以避免不同部分的代码之间的名称冲突。命名空间将一组相关的类、函数、变量等封装在一起,使得它们可以通过命名空间来访问。在不同的命名空间中,可以使用相同的名称来表示不同的实体,不会发生冲突。通过使用命名空间,可以提高代码的可读性和可维护性。

    变量、函数、类等都是大量存在的,这些变量、函数、类的名称都存在于全局作用域中,可能会导致许多冲突。使用命名空间的目的是对标识符进行本地化,从而避免命名冲突或名字污染。

2.1、命名空间的定义

    定义命名空间,需要使用到关键字namespace,后面跟空间的名字,然后接一对{}即可,{}中即为命名空间的成员

//命名空间可以定义函数、变量、类型
namespace BB     //BB是命名空间的名字
{
    int rand = 0;
    int Add(int left, int right)
    {
        return left + right;
    }
    struct Node
    {
        struct Node* next;
    };   
}
 

    2.2、命名空间的嵌套

    命名空间的嵌套帮助将相关的代码更好地组织起来,使得代码结构更加清晰和易于维护。通过将相关的类、函数、变量等放置在同一个命名空间或子命名空间中,可以方便地查找和使用这些代码。

//test.cpp
namespace N1
{
    int a = 0;
    int b = 0;
    int Add(int left, int right)
    {
        return left + right;
    }
    namespace N2
    {
        int c = 0;
        int d = 0;
        int Sub(int left, int right)
        {
            return left - right;
        }
}

2.3、命名空间的合并

    同一工程中允许存在多个相同名称的命名空间,编译器最后会合并为一个命名空间,在编程中,命名空间用于组织和管理代码。一个命名空间中可以包含多个类、函数、变量等。当一个项目中使用了多个命名空间时,有时候需要将这些命名空间中的成员合并到一个命名空间中,以方便在代码中引用和使用。

//test.cpp
namespace N1
{
	int a = 0;
	int b = 0;
	int Add(int left, int right)
	{
		return left + right;
	}
}
//test.h
namespace N1
{
	int c = 0;
	int b = 0;
	int Mul(int left, int right)
	{
		return left * right;
	}
}

    在一个工程中的test.h和上面test.cpp这两个N1会被合并为一个

2.4命名空间的使用(展开命名空间)

  •     加命名空间名称及作用域限定符::
#include <stdio.h>
namespace BB
{
	int a = 1;
	int b = 2;
	int Add(int left, int right)
	{
		return left + right;
	}
}
int main()
{
	printf("%d\n", BB::a);
	printf("%d\n", BB::b);
	printf("%d\n", BB::Add(2, 3));
	return 0;
}

  •     使用using将命名空间中某个成员引入
#include <stdio.h>
namespace BB
{
	int a = 1;
	int b = 2;
	int Add(int left, int right)
	{
		return left + right;
	}
}
using BB::a;
using BB::b;
using BB::Add;
int main()
{
	printf("%d\n", a);
	printf("%d\n", b);
	printf("%d\n", Add(2, 3));
	return 0;
}

  •  使用using namespace 命名空间名称引入 
#include <stdio.h>
namespace BB
{
	int a = 1;
	int b = 2;
	int Add(int left, int right)
	{
		return left + right;
	}
}
using namespace BB;
int main()
{
	printf("%d\n", a);
	printf("%d\n", b);
	printf("%d\n", Add(2, 3));
	return 0;
}

 3、C++的输入和输出

#include <iostream>
//std是C++标准库的命名空间名,C++标准库的定义实现都会放到这个命名空间中
using namespace std;
int main()
{
	int a = 10;
	cin >> a;
	cout << a << endl;
	cout << "Hello World!"<< endl;
	return 0;
}
  1. 使用cout标准输出对象cin 标准输出对象时,必须包含<iostream>头文件,以及展开命名空间std。
  2. cout和cin是全局的流对象,endl是特殊的C++符号,表示换行输出,她们都包含在头文件<iostream>中。
  3. >> 是流插入运算符, <<  是流提取运算符。
  4. 使用C++输入输出更加方便,可以自动识别变量类型、连续书写、中间任意添加。
  5. 实际上cout和cin分别是ostream和istream类型的对象,>> 和 << 也涉及运算重载等方面的知识。

std命名空间的使用惯例

  1. 在日常练习中,建议直接 using namespace std 即可,这样就很方便。
  2. using namespace std 展开,标准库函数就全部暴露出来了,如果我们定义跟标准库函数重名的类型、对象、函数时,就存在冲突问题。该问题在日常练习中很少出现,但是在项目开发中代码较多、规模大,就很容易出现这种问题。所以建议在项目开发中使用,像 std::cout 这样使用指定命名空间 + using std::cout 展开常用的对象、类型等。

4、缺省参数

4.1、缺省参数的概念

    缺少参数是声明或定义函数时为函数的参数指定一个缺省值。在调用函数时,如果没有指定实参则采用该参数的缺省值,否则使用指定的实参。缺省值指的是在没有明确赋值的情况下,计算机系统默认使用的值。不同编程语言和软件系统有不同的缺省值。

#include <iostream>
using namespace std;
void Func(int a = 0)
{
	cout << a << endl;
}
int main()
{
	Func();     //没有传参时,使用参数的默认值
	Func(10);   //传参时,使用指定的参数
	return 0;
}
///
0
10

4.2缺省参数的分类

  • 全缺省参数
#include <iostream>
using namespace std;
void Func(int a = 10,int b = 100,int c = 1000)
{
	cout << "a=" << a << endl;
	cout << "b=" << b << endl;
	cout << "c=" << c << endl;
}
int main()
{
	Func();     
	Func(1,2,3); 
	return 0;
}
//
a=10
b=100
c=1000
a=1
b=2
c=3
  • 半缺省参数
//缺省一部分,且只能从右向左缺省
#include <iostream>
using namespace std;
void Func(int a , int b = 100, int c = 1000)
{
	cout << "a=" << a << endl;
	cout << "b=" << b << endl;
	cout << "c=" << c << endl;
}
int main()
{  
	Func(1, 2);
	Func(1,2,3); 
	return 0;
}
/
a=1
b=2
c=1000
a=1
b=2
c=3

注意 

  1. 半缺省参数必须从右往左依次给出来,不能间隔着给。
  2. 缺省参数不能在函数的声明和定义中同时出现。
  3. 缺省值必须是常量或者全局变量
  4. C语言不支持缺省参数(编译器不支持)
void Func(int a = 10)
{

}
void Func(int a = 20)
{

}
//如果声明与定义位置同时出现,恰巧两个位置的值不同
//那么编译器就无法确定到底应该使用那个缺省值

“肤浅的心灵将因为不幸的打击而消沉,伟大的心灵将因此而升华"  

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小波同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值