C++ 基础知识

发布于:2025-05-13 ⋅ 阅读:(13) ⋅ 点赞:(0)

1、 namespace的定义

  • 本质是定义一个域,不同的域可以定义同名变量;C++的域有全局域、局部域、命名空间域、类域
  • namespace只能定义在全局,也可以嵌套
  • C++的标准库被放在std(标准模板库中)
#include <stdio.h>
#include <stdlib.h>
namespace yc
{
 // 命名空间中可以定义变量/函数/类型 
 int rand = 5;
 int Add(int left, int right)
 {
 return left + right;
 }
 struct Node
 {
 struct Node* next;
 int val;
 };
}
int main()
{
 // 这⾥默认是访问的是全局的rand函数指针 
 printf("%p\n", rand);
 // 这⾥指定yc命名空间中的rand 
 printf("%d\n", yc::rand);
 return 0;
}
//2. 命名空间可以嵌套 
namespace yc
{
 namespace ya
 {
 int rand = 1;
 int Add(int left, int right)
 {
 return left + right;
 }
 } 
 namespace yb
 {
 int rand = 2;
 int Add(int left, int right)
 {
 return (left + right)*10;
 }
 }
}

int main()
{
 printf("%d\n", yc::ya::rand);
 printf("%d\n", yc::yb::rand);
 printf("%d\n", yc::ya::Add(1, 2));
 printf("%d\n", yc::yb::Add(1, 2));
 return 0;
}

2、命名空间使用

  • using:将命名空间中某个成员展开,平时学习可以使用,大型项目不建议使用,也就是展开成员的意思。
`// using展开命名空间中某个成员
using A::b;
int main()
{
	printf("%d\n",A::a);
	printf("%d\n",b);
}
// 展开命名空间中全部成员
using namespace A;
int main()
{
	printf("%d\n",a);
	printf("%d\n",b);
	return 0;
}

3、C++输入和输出

  • std::cin面向窄字符的标准输入流,std::cout面向窄字符的标准输出流
  • std::endl相当于一个换行字符加速缓冲区
  • << 流插入运算符,>>流提取运算符
  • C++的输入输出自动识别变量类型

4、缺省参数

缺省分为全缺省和半缺省

  • 带缺省参数的函数调⽤,C++规定必须从左到右依次给实参,不能跳跃给实参。

5、函数重载

  • C++⽀持在同⼀作⽤域中出现同名函数,同名函数的形参不同,可以是参数个数不同或者类型不同。
// 1、参数类型不同
int Add(int a, int b)
double Add(int a, int b)
// 2、参数个数不同
void f()
void f(int a)
// 3、参数类型顺序不同
void f(int a, cahr b)
void f(char b , int a)
// 返回值不同不能作为重载条件,因为调⽤时也⽆法区分 
void f()
int f()

6、引用

6.1引用的概念和定义

引用定义:给已经存在的变量取别名,不会新开辟内存,和引用的变量共用一块内存

类型& 引用别名 = 引用对象

// 引⽤:b和c是a的别名 
 int& b = a;
 int& c = a;
 // 可以给别名b取别名,d相当于还是a的别名 
 int& d = b;

// 根据引用不改变名字,也不会开辟内存空间,共用一块内存,下面输出的结果是相同的。
 cout << &a << endl;
 cout << &b << endl;
 cout << &c << endl;
 cout << &d << endl;

6.2 引用的特性

  • 引用在定义的时候必须初始化,int& b = a;
  • 一个变量可以有很多个引用

6.3 引用的使用

  • 用途:引用传参和引用返回,减少拷贝提高效率
  • 引用传参和指针传参类似,引用传参更方便。

7、const引用

const int a = 10;
 // 编译报错:error C2440: “初始化”: ⽆法从“const int”转换为“int &” 
 // 这⾥的引⽤是对a访问权限的放⼤ 
 //int& ra = a;

 // 这样才可以 
 const int& ra = a;
 // 编译报错:error C3892: “ra”: 不能给常量赋值 
 //ra++;

 // 这⾥的引⽤是对b访问权限的缩⼩ 
 int b = 20;
 const int& rb = b;
 // 编译报错:error C3892: “rb”: 不能给常量赋值 
 //rb++;

8、指针和引用的关系

  • 引用是取别名不用开空间、指针存储要开空间
  • 引⽤在初始化时引⽤⼀个对象后,就不能再引⽤其他对象;⽽指针可以在不断地改变指向对象。
  • 引用可以直接访问引用对象,指针需要解引用才能访问指向对象

9、inline

  • inline修饰的叫做内联函数,调用时建立栈帧,提高效率
  • 使用频繁调用的短小函数,不适合循环和递归

10、nullptr

  • C++11中引⼊nullptr,nullptr是⼀个特殊的关键字,nullptr是⼀种特殊类型的字⾯量,它可以转换成任意其他类型的指针类型。


网站公告

今日签到

点亮在社区的每一天
去签到