C++基础入门速通

一、hello world 打印

1.1.C语言版本

#include<stdio.h>

int main(){

printf("hello world");

return 0;

}

1.2.C++版本

#include<iostream>

using namespace std;

int main() {

cout << "hello world!" << endl;

return 0;

}

二、命名空间冲突

2.1.命名空间的定义

需要使用namespace关键字,后面跟命名空间的名字,再加上一对{},{}中即为命名空间的成员,命名空间中可以定义函数、变量、类型等。

namespace本质是定义出一个域,与全局域独立。

C/C++中,主要有全局域、局部域、命名空间域和类域,命名空间域和类域不影响变量的生命周期。

#include<iostream>

//using namespace std;

//int main() {

// cout << "hello world!" << endl;

// return 0;

//}

int main() {

/*cout << "a" << endl;*/

int a = 1;

int a = 10;

printf("%d", a);

return 0;

}

2.2."就近原则"与遮蔽效应

当内外层作用域存在同名变量时,编译器会优先使用当前层级(最近)的变量,从而暂时"屏蔽"掉外层的同名变量。

三、命名空间定义变量、函数、类型

#include<iostream>

namespace sk {

//1.命名空间定义变量

int a = 1;

//2.命名空间定义函数

int add(int c, int b) {

return c+ b;

}

//3.命名空间定义类型

struct k {

int val;

struct k* next;

};

}

int a = 9;

int main() {

printf("%p\n",a);

printf("%d\n",sk:: a);

return 0;

}

四、命名空间的使用

4.1.命名空间可以嵌套使用

namespace sk {

//1.命名空间定义变量

int a = 1;

//2.命名空间定义函数

int add(int c, int b) {

return c+ b;

}

//3.命名空间定义类型

struct k {

int val;

struct k* next;

};

//命名空间嵌套使用

namespace ok {

int q = 6;

int sub(int d, int e) {

return d - e;

}

}

}

4.2.使用命名空间定义的函数、变量有三种方式
a.指定命名空间访问
b.using将命名空间中的某个成员展开
c.展开命名空间中的全部成员
4.3.未声明的标识符

namespace bc{

int a = 1;

int b = 2;

}

int main() {

printf("%d\n", a);

return 0;

}4.4.多文件中可以定义同名namespace它默认会合并在一起就如同是一个namespace一样

五、C++的输入与输出

5.1.<iostream>

<iostream>是input output stream的缩写,是标准的输入输出流库,定义了标准的输入输出对象。

5.2.std::cin

std::cin是标准输入流,主要面向窄字符的标准输入流。

5.3.std::cout

std::cout是标准输出流,主要面向窄字符的标准输出流。

5.4.std::endl

std::endl是一个函数,流插入输出时,相当于插入一个换行字符和刷新缓冲区的作用。

六、缺省参数

6.1.缺省参数的定义

缺省参数是函数声明和定义时为函数的参数指定一个缺省值,在函数调用过程中,如果没有指定实参九使用形参的缺省值。缺省函数分为全缺省和半缺省。

6.2.全缺省

全缺省就是全部形参给缺省值。

6.3.半缺省

半缺省就是部分形参给缺省值。C++规定的半缺省值必须从右到左依次连续缺省,不能跳跃间断。

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

七、函数重载

7.1.定义

C语言中函数在同一作用域中不支持同名使用,C++支持在同一作用域中出现同名函数,可以是参数个数或者类型或类型顺序不同,使用起来更加灵活

7.2.使用
a.参数类型不同
b.参数个数不同
c.参数类型顺序不同

八、引用

8.1.引用的概念和定义

引用就如同现实生活中的给别人取外号一样,同理,在C++中,给已存在的一个变量取别名,这称为引用,编译器不会为引用单独开辟空间。

定义:类型&引用别名=引用对象;

8.2.引用的特性
a.定义时初始化
b.一个变量可以有多个引用
c.一旦引用一个实体,就不能引用其他实体
8.3.引用在实际中的应用

(引用传参和引用做返回值)实践中主要引用传参和引用作返回,减少拷贝提高效率和改变引用对象时同时改变被引用对象

代码如下:可自行测试

#include<iostream>

using namespace std;

void swap(int& a, int& b) {

int tmp;

tmp = a;

a = b;

b = tmp;

}

int main() {

int x=20,y=90;

cout << x << " " << y << endl;

swap(x, y);

cout << x<< " " << y<< endl;

return 0;

}

九、const引用

9.1.const引用的定义

在 C++ 中,const 引用(常量引用)是指不允许通过该引用修改其所绑定对象的引用。它的核心语法是在类型前加上 const 修饰符。

9.2.使用

引用const对象,要用const引用。const引用可以引用普通对象,引用权限可以缩小,但不能放大

代码如下:可以自行测试

#include<iostream>

using namespace std;

int main() {

const int x = 20;//只读不写

//int& a = x;//这里可写,报错原因:权限放大了

const int& a = x;

int y = 30;

const int& b = y;//只能看,不能改

cout << x << " " << a << endl;

cout << y << " " << b << endl;

return 0;

}

十、指针和引用的关系

10.1.引用不开空间,指针是地址,需要开空间。

10.2.引用需要初始化,指针建议初始化。

10.3.引用在初始化一个对象后,不能再引用其他对象,指针可以改变指向。

10.4.引用可以直接访问指向对象,指针需要初始化。

十一、inline

11.1.内联函数的定义

用inline修饰的函数称为内联函数,如swap函数。

11.2.使用

适用于频繁调用的短小函数(5-10)行,不适用于代码相对多的函数,因为加上inline也会背编译器省略。

代码如下:可以自行测试

#include<iostream>

using namespace std;

inline int add(int x, int y) {

return x + y;

}

int main() {

int x = 10;

int y = 20;

cout << x << " " << y<< endl;

return 0;

}

十二、nullptr

12.1.定义

nullptr是一个特殊的关键字,nullptr是一种特殊类型的字面量,它可以转换成任意其他类型的指针类型使用nullptr定义空指针可以避免类型转换的问题,因为nullptrl只能被隐式地转换为指针类型而不能转换为整数类型。

#include<iostream>

using namespace std;

void f(int x) {

cout << "f(int x)" << endl;

}

void f(void* x) {

cout << "f(void *x)" << endl;

}

int main() {

f(0);

return 0;

}

#include<iostream>

using namespace std;

void f(int x) {

cout << "f(int x)" << endl;

}

void f(void* x) {

cout << "f(void *x)" << endl;

}

int main() {

f(0);

f(NULL);

f(nullptr);

return 0;

}

相关推荐
Herbert_hwt1 小时前
第六章 Java深入理解接口、函数式接口与lambda表达式
java·开发语言·算法
tudousisi2221 小时前
二维费用01背包
c++
2601_956121971 小时前
高精度问题
c++
API快乐传递者1 小时前
电商竞品分析接口实战指南:从数据采集到决策洞察的全链路方案
java·python
橙橙笔记1 小时前
C++的学习第三部分
开发语言·c++·学习
程序员黑豆8 小时前
Java类型推断完全指南:从var到菱形运算符,掌握使用限制与最佳实践
java·前端·ai编程
风流 少年9 小时前
Spring AI 2.0:Memory
java·后端·spring
码匠许师傅9 小时前
【C++ 面试真题】聊聊 C++ 的移动语义与右值引用
java·c++·面试
2603_9651481110 小时前
如何解析JSON数据?API返回的商品信息处理教程
开发语言·数据库·python·自动化·json·api