C++入门篇1

news2024/11/19 12:33:07

文章目录

  • C++入门篇1
    • 1、命名空间
      • 1.1、命名空间定义
      • 1.2、命名空间的使用
    • 2、输入&输出
    • 3、缺省参数
      • 3.1、缺省参数概念
      • 3.2、缺省参数分类

img

C++入门篇1

1、命名空间

1.1、命名空间定义

命名空间是什么?是一种将相关功能和数据封装在一起的方式,以避免名称冲突和提高代码的可读性和可维护性。我们知道,一个大型项目的编写,不是由一个人来写的,一般都是几人到几十人共同完成,每个人完成一个模块,最后进行合并。那么这么多人同时进行编写项目,难免会产生命名冲突问题,比如函数同名了或者变量同名了。那么怎么解决这个问题呢?答案就是每个人都给自己创建一个自己的命名空间。

  • 定义命名空间,使用namespace关键字,后面加一个命名空间的名字,再加一个{}{}中即为命名空间的成员。
#include <stdio.h>
#include <stdlib.h>

int rand = 10;
// C语言没办法解决类似这样的命名冲突问题,所以C++提出了namespace来解决
int main()
{
 		printf("%d\n", rand);
		return 0;
}
// 编译后后报错:error C2365: “rand”: 重定义;以前的定义是“函数”

1.2、命名空间的使用

  • 我们已经知道了命名空间怎么创建了,那么命名空间中的成员该怎么使用呢?如下:

    #include <stdio.h>
    
    int y = 0;
      
    namespace xp {
        int x = 0;
    
        int Add(int a, int b) {
            return a + b;
        }
    
        typedef struct Stack {
            int *data;
            int capacity;
            int size;
        } ST;
    
    }
    
    int main() {
      	//这里编译报错,找不到ST
      	ST* st;
        //这里编译报错,找不到变量x
        printf("%d", x);
      	printf("%d", y);
        return 0;
    }
    
  • 怎么解决创建命名空间后把成员放到里面,但是在外面找不到这个成员的问题?有三种解决方案:

    1.使用命名空间名称加作用域限定符::(两个冒号):

    int main() {
        xp::ST *st;
        printf("%d", xp::x);
        printf("%d", y);
        return 0;
    }
    

    2.打开命名空间,把里面所有的成员放出来:使用using namespace 命名空间名称

    using namespace xp;
    
    int main(){
      ST* st;
    	printf("%d", x);
      printf("%d", y);
      return 0;
    }
    

    3.只打开里面某个成员的空间,把这个成员放出来,其他的成员还是需要加作用域限定符才能访问:(常用

    using xp::ST;
    
    int main(){
      ST* st;
    	printf("%d", xp::x);
      printf("%d", y);
      return 0;
    }
    
  • 注意:命名空间的创建可以套娃,并且访问里面的成员也得套娃使用作用域限定符:

    #include <stdio.h>
    
    int y = 0;
    
    namespace xp {
        int x = 0;
    
        namespace zl {
            int Add(int a, int b) {
                return a + b;
            }
    
            namespace xpzl {
                typedef struct Stack {
                    int *data;
                    int capacity;
                    int size;
                } ST;
            }
        }
    
    }
    
    
    int main() {
        printf("%d", xp::x);
        xp::zl::Add(2, 3);
        xp::zl::xpzl::ST *st;
        printf("%d", y);
        return 0;
    }
    

2、输入&输出

  • 我们来看一段刚开始学C++的时候的一段代码:

    #include<iostream>
    // std是C++标准库的命名空间名,C++将标准库的定义实现都放到这个命名空间中
    using namespace std;
    int main()
    {
    		cout<<"Hello world!"<<endl;
    		return 0;
    }
    
    • 这里我们看到#include不再是<stdio.h>了,变成了<iostream>了,在C++中,一般输入输出不再采用scanfprintf了,而是采用cincout,其中这个iostream也就是**io流**,它包含了cout、cin、endl(类)流插入运算符<<和==流提取运算符==>>。流插入运算符<<用来输出,流提取运算符>>用来输入。(知道有这么个知识就行了,这里后面会讲深一点)

    • 还发现了coutcout标准输出流,配合流插入运算符<<一起使用。类似地,cin标准输出流,配合流提取运算符>>一起使用。

    • endl就是一个换行符,相当于C语言的"\n"

    • 这里使用了using namespace std;,相当于打开了命名空间std,其中cout、cin、endl都是这个命名空间里的成员。所以使用cout、cin、endl不需要加上作用域限定符。

      #include<iostream>
      
      int main()
      {
        	//这里编译报错,找不到cout和endl
      		cout<<"Hello world!"<<endl;
      		return 0;
      }
      
  • 相对于C语言,C++的输入输出要高级多了,它能自动识别变量的类型

    int main() {
        int a;
        double b;
        char c;
        string d;
        // 可以自动识别变量的类型
        cin >> a;
        cin >> b >> c >> d;
        cout << a << d << endl;
        cout << b << " " << c << endl;
        return 0;
    }
    
    • string是新的数据类型,相当于C语言的 char [n](长度为n的字符数组),后面会讲。
    • 这里有一个问题:C++怎么控制浮点数输出精度?有一个简单的方法就是使用C语言的printf,因为C++兼容绝大部分C语言的语法。

3、缺省参数

3.1、缺省参数概念

  • 缺省参数是在声明函数时为其指定一个默认值,以便在调用该函数时无需指定该参数。使用缺省参数的原因是减少函数调用时的参数数量,简化代码,提高可读性和易用性。

    void Func(int a = 0) {
        cout << a << endl;
    }
    
    int main() {
        Func();   // 没有传参时,使用参数的默认值
        Func(10); // 传参时,使用指定的实参
        return 0;
    }
    

3.2、缺省参数分类

  • 全缺省参数:即函数的参数全是有默认值的。

    void Func(int a = 10, int b = 20, int c = 30) {
        cout << "a = " << a << endl;
        cout << "b = " << b << endl;
        cout << "c = " << c << endl;
    }
    
  • 半缺省参数:函数的参数不全是有默认值的。但是有规则:规则是调用时只能从最后一个参数开始省略,且缺省值必须是常量,且缺省参数不能在函数声明和定义中同时出现

    • 可行:

      void Func(int a, int b = 20, int c = 30) {
          cout << "a = " << a << endl;
          cout << "b = " << b << endl;
          cout << "c = " << c << endl;
      }
      
    • 不可行:

      //a.h
      void Func(int a = 10);
      
      // a.cpp
      void Func(int a = 20) {}
      
      // 注意:如果声明与定义位置同时出现,恰巧两个位置提供的值不同,那编译器就无法确定到底该用那个缺省值。
      

OKOK,本期就分享到这里。接下来还会分享入门篇2、入门篇3…,进阶篇1、进阶篇2…。一起加油,一起进步!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1081734.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

nginx如何安装 以及nginx的配置文件

Nginx 网站服务 是一个高性能 轻量级web服务软件&#xff0c; 高新能&#xff1a;对http并发连接的处理能很高&#xff0c;单台处理器可支持30000-50000个并发请求&#xff0c;&#xff08;一般设置在20000个左右&#xff09; 轻量级&#xff1a;nginx软件很小&#xff0c;安装…

c语言:通讯录管理系统(动态分配内存版)

前言&#xff1a;在大多数高校内&#xff0c;都是通过设计一个通讯录管理系统来作为c语言课程设计&#xff0c;通过一个具体的系统设计将我们学习过的结构体和函数等知识糅合起来&#xff0c;可以很好的锻炼学生的编程思维&#xff0c;本文旨在为通讯录管理系统的设计提供思路和…

GPU 基础知识整理

萌新&#xff1a; 在接触一款硬件时我会&#xff1a;基础硬件结构&#xff0c;线程结构&#xff0c;内存布局&#xff0c;数据吞吐量&#xff0c;等方面进行学习 首先GPU的特点: 并行性能&#xff1a;GPU 是专门设计用于并行计算的硬件&#xff0c;通常具有大量的处理单元&am…

Vue中的监视属性

一、监视属性的使用 &#xff08;一&#xff09;配置watch进行监视 当我们想要监视一个属性改变的时候就可以使用监视属性监视其变化并进行操作。 语法格式如下&#xff1a; watch:{ 监视属性名称 : { // 监视属性的配置项 } } 1. handler函数 当监视的属性发生变化时就调…

进程死锁的处理策略之预防死锁,避免死锁以及死锁的检测和解除

1.不允许死锁发生 1.静态策略&#xff1a;预防死锁 知识回顾:死锁的产生必须满足四个必要条件&#xff0c;只要其中一个或者几个条件不满足&#xff0c;死锁就不会发生。 1.破环互斥条件 互斥条件: 只有对必须互斥使用的资源的争抢才会导致死锁。 如果把只能互斥使用的资源…

数据结构和算法(12):词典

词典 逻辑上的词典&#xff0c;是由一组数据构成的集合&#xff0c;其中各元素都是由关键码和数据项合成的词条&#xff08;entry&#xff09;。 映射&#xff08;map&#xff09;结构与词典结构一样&#xff0c;也是词条的集合。 二者的差别仅仅在于&#xff0c;映射要求不同…

cpp文件操作

文件操作 数据流 在cpp中&#xff0c;流&#xff08;stream&#xff09;是一个抽象概念&#xff0c;用于描述如何从一个位置到又一个位置传输数据。流主要用于I/O操作。 数据流包括两大类&#xff1a;1. 输入流(istream)&#xff1a;数据从某个源流入程序, 2. 输出流(ostrea…

CCF CSP认证历年题目自练Day28

题目一 试题编号&#xff1a; 202109-1 试题名称&#xff1a; 数组推导 时间限制&#xff1a; 1.0s 内存限制&#xff1a; 512.0MB 样例1输入 6 0 0 5 5 10 10 样例1输出 30 15 样例2输入 7 10 20 30 40 50 60 75 样例2输出 285 285 题目分析&#xff08;个人理解&#…

yml显示不了小树叶图标解决办法

问题描述 在项目中&#xff0c;idea新建yml文件不显示小绿叶图标 1、解决办法一 找到下图设置&#xff1a;file -> settings -> Plugins 查看spring boot插件是非已安装&#xff08;按照下图步骤查看&#xff09; 2、解决办法二 ctrlalts&#xff0c;去File Types查…

记一次使用vue-markdown在vue中解析markdown格式文件,并自动生成目录大纲

先上效果图 如图所示&#xff0c;在网页中&#xff0c;能直接解析markdown文档&#xff0c;并且生成目录大纲&#xff0c;也支持点击目录标题跳转到对应栏目中&#xff0c;下面就来讲讲是如何实现此功能的。 1、下载vue-markdown yarn add vue-markdown 2、在页面中渲染markdo…

MySQL数据生成工具mysql_random_data_load

在看MySQL文章的时候偶然发现生成数据的工具&#xff0c;此处直接将软件作者的文档贴了过来&#xff0c;说明了使用方式及下载地址 Random data generator for MySQL Many times in my job I need to generate random data for a specific table in order to reproduce an is…

2023.10 秋爽版 java 软件授权激活 架构 java代码混淆 按日期授权 不联网

什么是代码混淆&#xff1f; 代码混淆是一种技术&#xff0c;用于在不改变代码功能的情况下&#xff0c;通过改变代码的结构和逻辑&#xff0c;使之变得更难理解和分析&#xff0c;从而增加反向工程的难度。 为什么要进行代码混淆&#xff1f; 在Java应用程序中&#xff0c;…

MyBatisPlus(十七)通用枚举

说明 MyBatisPlus 优雅地使用枚举类型。 声明通用枚举属性 使用 EnumValue 注解枚举属性 package com.example.web.enumeration;import com.baomidou.mybatisplus.annotation.EnumValue; import com.fasterxml.jackson.annotation.JsonValue; import lombok.AllArgsConstru…

安装Android SDK点击SDK Manager.exe一闪而退完美解决方案

如上图&#xff0c;我们点击 “SDK Manager.exe” 总是一闪而退。 1.查看提示说Detect whether Java SE Development Kit is installed&#xff0c;检查你的JDK是否安装。 2.在cmd里看了&#xff0c;java -version 和javac -version都是有显示版本的。说明安装以及环境配置成…

ES6介绍

1&#xff1a;ES6声明变量 1.变量var声明变量的问题 ES5 可以重复声明变量可以先使用再声明造成全局变量污染 2.let声明变量特点 ES6 不能先使用再说明不能重复定义一个变量具有块级作用域 3.const声明变量特点 ES6 不能先使用再说明一旦声明必须赋值赋值之后不能修改具有块级…

0144 文件管理

目录 4.文件管理 4.1文件系统基础 4.2目录 4.3文件系统 部分习题 4.文件管理 4.1文件系统基础 4.2目录 4.3文件系统 部分习题 1.UNIX操作系统忠&#xff0c;输入/输出设备视为&#xff08;&#xff09; A.普通文件 B.目录文件 C.索引文件 D.特殊文…

cesium 地图蒙版遮罩效果

示例代码 <!DOCTYPE html> <html lang"en"><head><!-- Use correct character set. --><meta charset"utf-8" /><!-- Tell IE to use the latest, best version. --><meta http-equiv"X-UA-Compatible"…

快速排序 ← PPT

【算法代码】https://blog.csdn.net/hnjzsyjyj/article/details/127825125

JavaScript (下)

1.面向对象 在 Java 中我们学习过面向对象&#xff0c;核心思想是万物皆对象。在 JavaScript 中同样也有面向对象。思想类似。 把相关的数据和方法组织为一个整体来看待&#xff0c;从更高的层次来进行系统建模&#xff0c;更贴近事物的自然运行模式 1.类的定义和使用 格式…

Java二叉树超详解(常用方法介绍)(2)

二叉树中的常用方法 静态二叉树的手动创建 这里我们先给出二叉树结点的信息(这里是内部类)&#xff1a; static class TreeNode {public char val;public TreeNode left;//左孩子的引用public TreeNode right;//右孩子的引用public TreeNode(char val) {this.val val;}} 手动…