C++基础入门:第一个C++程序

◆博主名称:少司府

欢迎来到少司府的博客☆*: .。. o(≧▽≦)o .。.:*☆

数据结构系列个人专栏:

初阶数据结构_少司府的博客-CSDN博客

编程基础训练系列个人专栏:

编程基础50题_少司府的博客-CSDN博客

⭐名不显时心不朽,再挑灯火看文章

目录

一、第一个C++程序

二、命名空间

[2.1 命名空间的价值](#2.1 命名空间的价值)

[2.2 namespace的定义](#2.2 namespace的定义)

[2.3 命名空间的使用](#2.3 命名空间的使用)

三、C++输入输出

四、缺省参数

[4.1 缺省参数类型](#4.1 缺省参数类型)

[4.2 缺省参数调用规则](#4.2 缺省参数调用规则)

五、函数重载

六、引用

[6.1 引用的概念和定义](#6.1 引用的概念和定义)

[6.2 引用的特性](#6.2 引用的特性)

[6.3 引用的作用](#6.3 引用的作用)

[6.4 const 引用](#6.4 const 引用)

[6.5 引用与指针的关系](#6.5 引用与指针的关系)

七、inline内联

[7.1 内联的定义及使用](#7.1 内联的定义及使用)

[7.2 内联的实际使用](#7.2 内联的实际使用)

八、nullptr


一、第一个C++程序

cpp 复制代码
#include <iostream>
using namespace std;

int main()
{
    cout << "hello world!" << endl;
    return 0;
}

如图,这是一个打印hello world的程序。

与C语言相同的是,C++在控制台打印东西也需要包含头文件。<iostream>就是C++的一个标准输入输出流,cout则是一个控制标准输出的对象。

二、命名空间

2.1 命名空间的价值

在C语言中,变量和函数是大量存在的,在包含很多头文件之后,我们在自己写程序的时候就可能引发严重的命名冲突

在此基础上,C++引入namespace命名空间来解决这一问题。

2.2 namespace的定义

1)、定义命名空间,用namespace关键字,后接命名空间的名字,然后接一对{}。

cpp 复制代码
namespace bity
{
    int rand=0;
}

2)、namespace本质是定义出一个域,这个域和全局域独立,不同的域可以定义同名的变量。

3)、C++中有函数局部域,全局域,命名空间域类域;命名空间域和类域不影响生命周期。

4)、namespace只能定义在全局,不过可以嵌套定义。

5)、C++的标准库都放在一个叫std(standard)的命名空间中。

cpp 复制代码
namespace Bity
{
    namespace cxr
    {
        int x=0;
    }
}

int main()
{
    std::cout << Bity::cxr::x << std::endl;
    return 0;
}

如图是打印x的值,:: 是域作用限定符,左边不写的时候默认访问全局域。

2.3 命名空间的使用

1)、指定命名空间访问

cpp 复制代码
std::cout << "hello world!" << std::endl;

2)、using将命名空间中某个成员单独展开

cpp 复制代码
using std::cout;

项目中经常访问的不冲突成员推荐这种方式。

3)、展开整个命名空间

cpp 复制代码
using namespace std;

该写法风险大,可能引发严重的命名冲突,平时练习可以这样写,项目中不推荐。

三、C++输入输出

1)、<iostream>是Input Output Stream 的缩写,是标准的输入、输出流库,定义了标准的输入、输出对象。

2)、std::cin 是istream类的对象,它主要面向窄字符的标准输入流

3)、std::cout 是ostream类的对象,它主要面向窄字符的标准输出流

4)、<< 是流插入 运算符(输出),>> 是流提取运算符(输入)

5)、std::endl 是一个函数,流插入输出时,相当于插入一个换行字符加刷新缓冲区

6)、C++的输入输出可以自动识别变量类型

四、缺省参数

4.1 缺省参数类型

缺省参数就是对于一个函数,赋值了的参数。主要分为全缺省半缺省

cpp 复制代码
void Func1(int a=1)
{
    cout << a << endl;
}

void Func2(int a=1,int b)
{
    cout << a << ' ' << b << endl;
}

如图,第一个函数为全缺省,第二个为半缺省。

4.2 缺省参数调用规则

1)、缺省参数必须从右到左连续缺省

2)、带缺省参数的函数的调用,必须从左到右依次传值

3)、函数声明和调用分离时,缺省参数不能在函数声明和定义中同时出现,规定必须函数声明给缺省值

4)、缺省值可以是常量,也可以是全局变量

5)、没有传参时,使用默认缺省值,传参时,使用指定实参

五、函数重载

C++支持在同一作用域 出现同名函数,但是要求这些同名函数形参不同。这样,C++函数的调用就表现出多态的行为。(静态的多态)

六、引用

6.1 引用的概念和定义

引用是给已存在的变量取一个别名 ,编译器不会为引用变量开辟内存空间,它和它的引用变量共用一块内存空间。形式如下:

cpp 复制代码
// 类型& 别名=变量名;
// 类型& 别名2=别名1;
6.2 引用的特性

1)、引用在定义时必须初始化

2)、可以给别名取别名

3)、引用一旦引用一个实体,就不能再改变指向

6.3 引用的作用

1)、作用于函数的传参和作为返回值

2)、引用作为返回值时可以同时改变++引用对象++和++被引用对象++

cpp 复制代码
​int STTop(ST& rs)
{    
    assert(rs.top>0);
    return rs.a[rs.top-1];
}
STTop(st1)=3;

​

如上图,该写法是错误的。返回值在返回的时候会格外开一个临时对象 ,这个临时对象有常量的属性,其不能被赋值

cpp 复制代码
​​int& STTop(ST& rs)
{    
    assert(rs.top>0);
    return rs.a[rs.top-1];
}
STTop(st1)=3;
​

​

该写法是对的,因为它返回的是引用,也就是栈顶数据变量本身,可以修改。

6.4 const 引用

1)、对于一个const对象 ,必须用const引用

cpp 复制代码
const int a=10;
// int& ra=a; error,权限放大
const int& ra=a;

2)、对于普通变量 ,可以用const 引用

cpp 复制代码
int b=20;
const int& rb=b;//权限缩小,rb只读不能改,但b可以

3)、const引用可以给常量取别名

cpp 复制代码
const int& rc=30;

4)、const引用可以引用临时对象

cpp 复制代码
double d=12.34;
int i=d;
const int& rd=d;//double->int 会发生隐式类型转换产生临时对象

产生临时对象总结:

1)、函数传值返回

2)、表达式结果

cpp 复制代码
const int& rc=(a+b);

3)、类型转换

6.5 引用与指针的关系

1)、语法上引用是取别名不开空间,指针存放变量地址,需要开空间

2)、引用在定义上必须初始化,指针可以不初始化

3)、引用在引用一个实体后,不能改变指向,指针可以改变指向

4)、引用可以直接访问对象,指针需要解引用

七、inline内联

7.1 内联的定义及使用

用inline 修饰的函数叫内联函数,编译C++程序时会展开内联函数 ,让函数直接在调用的地方使用,而不是开辟栈帧,提高效率。

cpp 复制代码
#define ADD(a,b) ((a)+(b))
cout << ADD(2&3,2|3) << endl;

用inline 来减少因宏的错误使用而引发的错误。

7.2 内联的实际使用

1)、在vs的debug版本下,为了方便调试,默认内联是不展开的

2)、inline 对编译器来讲,只是建议展开,编译器也可以选择不展开

3)、inline 不建议声明和定义分离在两个文件,分离会引发链接错误

八、nullptr

cpp 复制代码
//NULL实际是一个宏,C语言中是 #define NULL ((void*)0)
//                 C++中是   #define NULL 0

nullptr是一个特殊的关键字,是一种特殊类型的字面量,它可以转换成任意的其他指针类型

本期的分享就到这里,如果觉得博主的文章比较对胃口的话,可以点一个小小的关注~

您的三连是我持续更新的动力~

相关推荐
yymboss30 分钟前
【JavaEE】Spring Boot 项目创建
java·spring boot·java-ee
专注VB编程开发20年31 分钟前
vscode插件开发/ 编辑器 事件大全
ide·vscode·编辑器
方安乐32 分钟前
Javascript工具库:classnames
开发语言·javascript·ecmascript
xushichao198935 分钟前
C++中的中介者模式
开发语言·c++·算法
Hello.Reader37 分钟前
从零开始安装 Qt完整新手教程(1)
开发语言·qt
娇娇yyyyyy39 分钟前
QT编程(19) : Qt 实现自定义delegate
开发语言·数据库·qt
AI科技星41 分钟前
基于wr/c + h/c = 1的螺旋线矢量特性及应用分析
c语言·开发语言·人工智能·opencv·算法·计算机视觉·r语言
sxhcwgcy1 小时前
快速在本地运行SpringBoot项目的流程介绍
java·spring boot·后端
是娇娇公主~1 小时前
C++ 多态机制与虚函数实现原理(补充)
c语言·c++
xiaomo22491 小时前
javaee-多线程进阶
java·开发语言