初级C++:入门语法

命名空间

防止人多变量也多的大型项目中命名发生冲突

namespace mmp /定义一个命名空间域
{
	int a = 233;
}
  1. 域作用限定符使用命名空间里的东东;
  2. 命名空间域里,支持变量、类型、函数,嵌套定义‘
  3. 同名的命名空间会自动合并,命名空间里不能有命名冲突。
  4. 使用命名空间域里的东西的三种方法:------第一种日常练习不必在意
int main()
{
	printf("%d \n", mmp::a);
	return 0;
}
using namespace std;/标准库的命名空间域 
/1.用起来方便,但把自己的定义暴露出去了,容易造成命名污染

/2.不会污染,但需要指定命名空间里某个具体的东东..
using  mmp::a;

/3.展开常用的,工程项目中常用的...
using std::cin;
using std::endl;

在这里插入图片描述


C++的输入输出

  1. endl等价于 \n
  2. 自动识别类型
    在这里插入图片描述
  3. C++兼容C,哪种输出方便就用哪种。

缺省参数

  1. 参数有个默认值,你不传参数,就用默认的;传了,就没缺省参数什么事儿了。

  2. 灵活运用开辟空间大小:没有传参默认开辟三个类型的大小;传参了就按你的来。

void Mall(int* pa, int cap = 4)
{
	//....

}

int main()
{
	int* a;
	Mall(a,100);
	//int e = add(6);
	//cout << e << endl;
	return 0;
}
  1. 全缺省,不传参的时候,全部都设有默认参数;半缺省,必须按照从右往左来设置默认参数,没有设置默认值的变量,必须传参。
  2. 函数声明的时候设置缺省参数,不能再声明和定义中同时出现。
int add(int a, int b = 10,int c=20)//右向左连续缺省
{

	return a + b + c;
}

int main()
{
	int e = add(6);
	cout << e << endl;
	return 0;
}

在这里插入图片描述

  1. 全缺省参数传参时,从左往右依次实例化
int Add(int x = 10, int y = 20)
{

	return x + y;

}

int main()
{
	cout << Add(1) << endl;
	
	return 0;
}

在这里插入图片描述


函数重载

  1. 参数类型不同 ,个数不同,顺序不同int double/ double int
  2. C++是根据参数的情况,对相同函数名字的函数在编译时进行了修饰。C语言是根据函数名直接找函数,编译器没有办法区别。
    在这里插入图片描述
int EatFish(int a , int b )
{

	return b - a;
}

int EatFish(int b , double a)
{

	return b ;
}

double EatFish(double a, double b)
{

	return b - a;
}

在这里插入图片描述

  1. 链接时做的一些事情,在这里插入图片描述
    在这里插入图片描述

  2. 有函数声明,编译器在编译时就给过,找函数定义就是跳转过去找函数地址。编译生成汇编代码,同时会生成符号表等等,符号表记录着函数的地址。如果把返回值带进修饰规则,则在编译期层面是可以区分的,但在语法调用时,无法区分,不知你是调用哪一个。inr add( int x )/ flaot add(float x) .....add() ?

  3. 如果用别人的C语言库,需要按C编译器编译,则用extern C 来解决

1.
extern "C"
{
#include "cExample.h"
}
2.
extern "C" double sqrt(double);
3.
extern "C"
{
      double sqrt(double);
      int min(int, int);
}

引用

  1. C++中,引用(reference)是指绑定到内存中的相应对象上。左值引用是绑定到左值对象上;右值引用是绑定到临时对象上。

  2. 这里的左值对象是指可以通过取地址&运算符得到该对象的内存地址;而临时对象是不能用取地址&运算符获取到对象的内存地址。

  3. ++左值是对应(refer to)内存中有确定存储地址的对象的表达式的值,而右值是所有不是左值的表达式的值。

  4. 引用---->给变量取别名。函数传参,用引用接受,则在函数内部可以直接改变实参,减少了形参的临时拷贝,面对只需读取的函数,const int&更安全;还可以给指针变量取别名。
    在这里插入图片描述

  5. 取别名限制条件,对你的读写权限可以不变或者缩小,但不能放大。

  6. 类型转换:当操作符左右两边类型不同,提升至大的类型,提升补符号位,同时有临时变量产生,临时变量具有常性,不可以对临时变量引用取别名,证明临时变量的存在:
    在这里插入图片描述
    在这里插入图片描述

  7. 引用该可以做返回值。

    • 返回引用时,要求被返回的参数,要以引用方式或指针方式存在…
    • 返回的参数,出了那个作用域还在。

内联函数和宏

  1. 以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数压栈的开销,内联函数提升程序运行的效率。
  2. 空间换时间,对编译器而言是一个建议,当代码很长时,会自动忽略,声明和定义不能分离。
  3. 宏的优缺点?
    优点:
    1.增强代码的复用性。
    2.提高性能。
  4. 缺点:
    1.不方便调试宏。(因为预编译阶段进行了替换)
    2.导致代码可读性差,可维护性差,容易误用。
    3.没有类型安全的检查 。

C++有哪些技术替代宏?1. 常量定义 换用const ;2. 函数定义 换用内联函数


auto和基于范围的for循环

  1. auto 自动推导变量的类型
  2. for 对遍历数组的优化,写起来更省事儿
oid TestFor()
{
 int array[] = { 1, 2, 3, 4, 5 };
 for(auto& e : array)
 e *= 2;
 
 for(auto e : array)
 cout << e << " ";
 
 return 0;
}

指针空值

  • 为了提高代码的健壮性,在后续表示指针空值时建议最好使用nullptr。
  • NULL实际是一个宏,NULL可能被定义为字面常量0,或者被定义为无类型指针(void*)的常量。
#ifndef NULL
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif
  • 在C++98中,字面常量0既可以是一个整形数字,也可以是无类型的指针(void*)常量,但是编译器默认情况下将其看成是一个整形常量,如果要将其按照指针方式来使用,必须对其进行强转(void *)0。
void f(int)
{
 	cout<<"f(int)"<<endl;
}
void f(int*)
{
 	cout<<"f(int*)"<<endl;
}
int main()
{
 	f(0);
 	f(NULL);
 	f((int*)NULL);
	 return 0;
}
  1. 在这里插入图片描述

动态库,静态库浅析

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


结语

请添加图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值