首页 > 编程语言 >C++(引用、窄化、输入)

C++(引用、窄化、输入)

时间:2024-09-25 20:49:45浏览次数:10  
标签:std cout int C++ 引用 窄化 using include

1. 引用 reference重点)

1.1 基础使用

引用就是某个变量或常量的别名,对引用进行操作与操作原变量或常量完全相同。

#include <iostream>

using namespace std;


int main()
{
    int a = 1;
    int& b = a; // b是a的引用
    b++;
    cout << a << " " << b << endl; // 2 2
    cout << &a << " " << &b << endl; // 0x61fe88 0x61fe88

    return 0;
}

1.2 特性

  • 可以改变引用变量的值,但是不能再次成为其他变量的引用。
#include <iostream>

using namespace std;


int main()
{
    int a = 1;
    int& b = a; // b是a的引用
    int c = 8;
    b = c; // 仅仅是赋值,b仍然是a的别名
    cout << a << " " << b << " " << c << endl; // 8 8 8
    cout << &a << endl; // 地址1
    cout << &b << endl; // 地址1
    cout << &c << endl; // 地址2
//    &b = c; 错误
//    int& b = c; 错误

    return 0;
}

  • 声明引用时,必须初始化。

  • 声明引用时,初始化的值不能为NULL。

  • 声明引用时,初始化的值可以是纯数值,但是此时引用需要使用const修饰,表示常引用,不允许修改引用值。
#include <iostream>

using namespace std;


int main()
{
//    int& b = 123; 错误
    const int& b = 123; // 常引用
    cout << b << endl; // 123
//    b++; 错误

    return 0;
}

  • 可以将变量引用的地址赋值给一个指针,此时指针指向的还是原来的变量。
#include <iostream>

using namespace std;


int main()
{
    int a = 1;
    int &b  = a;
    int* c = &b;
    cout << *c << endl; // 1
    cout << c << " " << &a << endl; // 0x61fe84 0x61fe84

    return 0;
}

  • 可以建立指针变量的引用。
#include <iostream>

using namespace std;


int main()
{
    int a = 1;
    int* b = &a;
    int*& c = b; // c是b的引用
    cout << c << " " << b << " " << endl; // 0x61fe88 0x61fe88
    cout << *c << endl; // 1

    return 0;
}

  • 可以使用const修饰引用,表示常引用,此时不允许改变引用的值,但是可以改变原变量。
#include <iostream>

using namespace std;


int main()
{
    int a = 1;
    const int& b = a; // b是a的常引用
//    b++; 错误
    a++;
    cout << b << endl; // 2

    return 0;
}

1.3 引用参数

【思考题】写一个函数,功能为交换两个int变量参数的数值。

#include <iostream>

using namespace std;

/**
 * @brief swap1 错误的交换方式
 */
void swap1(int a,int b)
{
    a = a ^ b;
    b = a ^ b;
    a = a ^ b;
    cout << a << endl; // 2
    cout << b << endl; // 1
}

/**
 * @brief swap2 C的交换方式
 * 指针比较复杂繁琐
 */
void swap2(int* a,int* b)
{
    *a = *a ^ *b;
    *b = *a ^ *b;
    *a = *a ^ *b;
}

/**
 * @brief swap3 使用引用参数传递,方便简洁
 */
void swap3(int& a,int& b)
{
    a = a ^ b;
    b = a ^ b;
    a = a ^ b;
}


int main()
{
    int a = 1;
    int b = 2;
    swap1(a,b);
    cout << a << endl; // 1
    cout << b << endl; // 2
    swap2(&a,&b);
    cout << a << endl; // 2
    cout << b << endl; // 1
    swap3(a,b);
    cout << a << endl; // 1
    cout << b << endl; // 2

    return 0;
}

使用引用作为函数参数时,不产生副本,可以使参数传递的效率提升,相比指针又更加简洁。

需要注意的是:

引用参数应该在内被const修饰的情况下,尽量使用const修饰,以达到引用参数的安全性。

#include <iostream>

using namespace std;

void show(const int& a,const int& b)
{
    cout << a << endl;
    cout << b << endl;
}


int main()
{
    int a = 1;
    int b = 2;
    show(a,b);
    cout << a << endl;

    return 0;
}

2. C++窄化了解)

#include <iostream>

using namespace std;

int main()
{
    double a = 123234.8;
    int b = (int)a; // C强制类型转换格式
    int c(a); // C++格式
    cout << b << endl;
    cout << c << endl;
    int d{a}; // C++11格式:可以给出数据窄化警告
    cout << d << endl;

    return 0;
}

3. 输入熟悉)

在C++中使用cin进行键盘输入,与cout一样支持连续操作。

#include <iostream>

using namespace std;

int main()
{
    int a;
    double b;
    string c; // C++的字符串类型

    cout << "依次输入整型、浮点型与字符串类型:" << endl;
    // 连续输入三个数据,分别给abc三个变量
    cin >> a >> b >> c;
    cout << "您输入的数据是:" << endl;
    cout << a << endl;
    cout << b << endl;
    cout << c << endl;

    return 0;
}

如果想输入空格,可以使用getline函数,可以一次获得一行的数据:

#include <iostream>

using namespace std;

int main()
{
    string s;
    cout << "请输入一行字符串,可以包含空格:" << endl;
    getline(cin,s);
    cout << "您输入的数据是:" << endl;
    cout << s << endl;

    return 0;
}

今天开始为大家更新C++笔记,加油。

标签:std,cout,int,C++,引用,窄化,using,include
From: https://blog.csdn.net/2301_77143270/article/details/142531140

相关文章

  • C++学习
    1、纯虚函数纯虚函数本质上与其他语言(如Java,C#)中的抽象方法或接口相同。纯虚函数允许我们在基类中定义一个没有实现的函数,然后强制子类去实现该函数。在面向对象中,创建一个类,只由未实现的方法组成,然后强制子类去实际实现它们,这非常常见,这通常被称为接口。因此,类中的接口只包......
  • C/C++语言基础--C++类数据、静态与非静态、常成员、友员、成员变量与函数指针等相关知
    本专栏目的更新C/C++的基础语法,包括C++的一些新特性前言通过前面几节,我们介绍了C++的类与对象、构造与析构函数、拷贝等相关知识,这一篇将详细介绍了C++的成员变量相关的知识点与扩展C语言后面也会继续更新知识点,如内联汇编;本人现在正在写一个C语言的图书管理系统,1000多......
  • Day1 c++(发展历史,特点,面向对象核心术语,开发环境,新建项目,引用,窄化,输入,字符串,函数)
    1.C++发展历史(了解)1983年,贝尔实验室(BellLabs)的BjarneStroustrup发明了C++。C++在C语言的基础上进行了扩充和完善,是一种面向对象程序设计(OOP)语言。Stroustrup说:“这个名字象征着源自于C语言变化的自然演进”。还处于发展完善阶段时被称为“newC”,之后被称为“Cwi......
  • 【C++】队列
    示意图什么是队列队列(queue)是一种具有先进入队列的元素一定先出队列性质的表。由于该性质,队列通常也被称为先进先出(firstinfirstout)表,简称FIFO表。就像排队一样,最先到的人也就最先买到单,优先离开队伍头文件与声明头文件#include<queue>声明定义queue<G>qu......
  • 【C++】面向对象编程的三大特性:深入解析继承机制
    C++语法相关知识点可以通过点击以下链接进行学习一起加油!命名空间缺省参数与函数重载C++相关特性类和对象-上篇类和对象-中篇类和对象-下篇日期类C/C++内存管理模板初阶String使用String模拟实现Vector使用及其模拟实现List使用及其模拟实现容器适配器Stack与QueuePriority......
  • c++ 静态私有成员
    1.概要1.问题提出价值:关于静态和私有的问题,静态的且是私有的,有什么价值呢,就是只有在类的函数中可以使用和赋值,这有一个隔离的价值。矛盾:静态成员必须在类的外部初始化,初始化那就要赋值,赋值就要访问,这和上面视乎矛盾?2.调查结果结论:静态私有成员可以在类的外部初始化;3.相关......
  • C++开发项目
    1.项目系统需求文章目录1.项目系统需求功能如下:2.创建项目:3.创建管理类3.1创建文件3.2头文件实现3.3源文件实现4.菜单功能4.1添加成员函数4.2菜单功能实现4.3测试菜单功能5.退出功能5.1提供功能接口5.2实现退出功能5.3测试功能运行效果图:6.创建职工类6.1创建职工抽象类6.2创建普......
  • 【每周例题】蓝桥杯 C++ 数树数
    数树数题目数树数题目分析通过图片的二叉树,我们可以发现每一个·分支的L=2a-1R=2a代码#include<iostream>#include<string>usingnamespacestd;chars[50];inta;intmain(){intn,q;cin>>n>>q;for(inti=0;i<q;i++){......
  • 【C++篇】解密 STL 动态之魂:全面掌握 C++ vector 的高效与优雅
    文章目录C++`vector`容器详解:从入门到精通前言第一章:C++`vector`容器简介1.1C++STL容器概述1.2为什么使用`vector`1.3`vector`的优缺点第二章:`vector`的构造方法2.1常见构造函数2.1.1示例:不同构造方法2.1.2相关文档第三章:`vector`容量与大小操作3.1......
  • 广州C++信奥赛老师解一本通题 1389:亲戚
    ​ 【题目描述】若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的某个人所在家族的人数。规定:x和y是亲戚,y和z是亲戚,那么x和z也是亲戚。如果x,y是亲戚,那么x的亲戚都是y的亲戚,y的亲戚也都是x的亲戚。【输入】第一行:三个整数n,(n......