【C++入门学习:基本语法】为了缩短学习周期,只记录部分不懂的语法

news2024/11/15 19:42:17

文章目录

  • 一、程序结构
  • 二、定义变量和声明变量
  • 三、变量作用域
  • 四、定义常量
  • 五、类型限定符号
  • 六、存储类
  • 七、运算符
  • 八、函数
  • 九、指针与引用
  • 十、C++ 的基本输入输出
  • 十一、“结构成员”和“类变量”引用

一、程序结构

#include <iostream>	// C++ 语言定义了一些头文件,这些头文件包含了程序中必需的或有用的信息。
using namespace std;	// 告诉编译器使用 std 命名空间。命名空间是 C++ 中一个相对新的概念。
 
int main()	//main() 是程序开始执行的地方
{
   // 如果没有声明namespace,那就要使用  std::cout << "Hello" << "World"; 
   cout << "Hello" << "World"; 	// 会在屏幕上显示消息 "Hello World"
   return 0;	// 终止 main( )函数,并向调用进程返回值 0
}

二、定义变量和声明变量

下面代码中,语句 extern int var;表示 var 在别的文件中已经定义,提示编译器遇到此变量时在其它模块中寻找其定义。语句 extern int ble = 10;表示定义了变量 ble,这一点需要注意。
注意:即使是 extern ,如果给变量赋值了,就是定义了。

extern int var; // 声明
extern int ble =10; // 定义
typedef int INT; // 声明
struct Node; // 声明
int value ; //声明 + 定义,因为C++会为value变量赋默认值

三、变量作用域

局部作用域:在函数内部声明的变量具有局部作用域,它们只能在函数内部访问。
全局作用域:在所有函数和代码块之外声明的变量具有全局作用域,它们可以被程序中的任何函数访问。
块作用域:在代码块内部声明的变量具有块作用域,它们只能在代码块内部访问。
类作用域:在类内部声明的变量具有类作用域,它们可以被类的所有成员函数访问。

注意:如果在内部作用域中声明的变量与外部作用域中的变量同名,则内部作用域中的变量将覆盖外部作用域中的变量。

#include <iostream>
using namespace std;

int a = 20;		//全局作用域变量

class MyClass {
public:
    static int class_var;  // 类作用域变量
};

int main() {
	int g = 10;		// 局部作用域变量
	{
        int a = 20;  	// 块作用域变量
    }
    return 0;
}

四、定义常量

#define LENGTH 10  	// define方式定义
const int  LENGTH = 10;		// const方式定义

五、类型限定符号

类型限定符提供了变量的额外信息,用于在定义变量或函数时改变他们默认行为的关键字
在这里插入图片描述

// const 实例
const int NUM = 10; // 定义常量 NUM,其值不可修改
const int* ptr = &NUM; // 定义指向常量的指针,指针所指的值不可修改
int const* ptr2 = &NUM; // 和上面一行等价
volatile 实例
volatile int num = 20; // 定义变量 num,其值可能会在未知的时间被改变

// mutable 实例
class Example {
public:
    int get_value() const {
        return value_; // const 关键字表示该成员函数不会修改对象中的数据成员
    }
    void set_value(int value) const {
        value_ = value; // mutable 关键字允许在 const 成员函数中修改成员变量
    }
private:
    mutable int value_;
};

// static 实例
void example_function() {
    static int count = 0; // static 关键字使变量 count 存储在程序生命周期内都存在
    count++;
}

// register 实例
void example_function(register int num) {
    // register 关键字建议编译器将变量 num 存储在寄存器中
    // 以提高程序执行速度
    // 但是实际上是否会存储在寄存器中由编译器决定
}

六、存储类

存储类定义 C++ 程序中变量/函数的范围(可见性)和生命周期。

auto 存储类
auto 关键字用于两种情况:声明变量时根据初始化表达式自动推断该变量的类型、声明函数时函数返回值的占位符。

auto f=3.14;      //double
auto s("hello");  //const char*
auto z = new auto(9); // int*
auto x1 = 5, x2 = 5.0, x3='r';//错误,必须是初始化为同一类型

register 存储类
定义存储在寄存器中而不是 RAM(内存) 中的局部变量。

register int miles;

static 存储类
static 存储类指示编译器在程序的生命周期内保持局部变量的存在,而不需要在每次它进入和离开作用域时进行创建和销毁。因此,使用 static 修饰局部变量可以在函数调用之间保持局部变量的值。

extern 存储类
extern 存储类用于提供一个全局变量的引用,全局变量对所有的程序文件都是可见的。当您使用 ‘extern’ 时,对于无法初始化的变量,会把变量名指向一个之前定义过的存储位置。

mutable 存储类
mutable 说明符仅适用于类的对象,这将在本教程的最后进行讲解。它允许对象的成员替代常量。也就是说,mutable 成员可以通过 const 成员函数修改。

thread_local 存储类
使用 thread_local 说明符声明的变量仅可在它在其上创建的线程上访问。 变量在创建线程时创建,并在销毁线程时销毁。 每个线程都有其自己的变量副本。

七、运算符

算法运算符
在这里插入图片描述
关系运算符
在这里插入图片描述
逻辑运算符
在这里插入图片描述
位运算符
在这里插入图片描述
赋值运算符
在这里插入图片描述

八、函数

函数声明、函数定义、函数调用

#include <iostream>
using namespace std;
 
// 函数声明
int max(int num1, int num2);
 
int main ()
{
   // 局部变量声明
   int a = 100;
   int b = 200;
   int ret;
 
   // 调用函数来获取最大值
   ret = max(a, b);
 
   cout << "Max value is : " << ret << endl;
 
   return 0;
}
 
// 函数返回两个数中较大的那个数
int max(int num1, int num2) 
{
   // 局部变量声明
   int result;
 
   if (num1 > num2)
      result = num1;
   else
      result = num2;
 
   return result; 
}

函数参数
当调用函数时,有三种向函数传递参数的方式
在这里插入图片描述

九、指针与引用

//	指针
int  var = 20;   // 实际变量的声明
int  *ip;        // 指针变量的声明
ip = &var;       // 在指针变量中存储 var 的地址

//	引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。
int i = 17;
int& r = i;		// 为变量i声明引用r

十、C++ 的基本输入输出

#include <iostream>
using namespace std;
 
int main( )
{
   char name[50];
 
   cout << "请输入您的名称: ";
   cin >> name;
   cout << "您的名称是: " << name << endl;
}

十一、“结构成员”和“类变量”引用

// 为了访问结构的成员,我们使用成员访问运算符(.)
struct Books
{
   char  title[50];
   char  author[50];
   char  subject[100];
   int   book_id;
};
 
 Books book;
 cout << book.book.title;

// 为了访问类的成员,我们使用变量访问运算符(::)
class MyClass {
public:
    static int class_var;
};
int MyClass::class_var = 30;

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

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

相关文章

[CoderChef复盘] START86 div4 20230419】

[CoderChef复盘] START86 div4 20230419 一、本周周赛总结P1 CodeChef Learn Problem Solving1. 题目描述2. 思路分析3. 代码实现 P2、Cricket Match2. 思路分析3. 代码实现 P3 Chef and Battery1. 题目描述2. 思路分析3. 代码实现 P4 Maximise Score1. 题目描述2. 思路分析3.…

HummerRisk V1.0 :架构升级说明

升级前须知 HummerRisk v1.0.0 版本与 HummerRisk v0.10.0 以及之前版本存在一定的差异。 HummerRisk v1.0.0 增加了一些新功能&#xff0c;也同时删除了一些功能&#xff0c;另外也对部分功能进行了重构和修复。 整体架构 功能原理 工作流程 组件说明 Vue&#xff1a;使用…

windows下为python3.x安装dlib

为任意版本python3.x安装dlib&#xff0c;通过VS2022编译方式安装更合理些, 因为目前pypi也只为windows提供了python3.5和3.6的.whl 1.安装vs2019 or later2.安装cmake3. 下载dlib的源代码(保存到 C&#xff0c;D&#xff0c;E&#xff0c;F盘都可以)4.开始编译5. 编译成果&…

科学计算库——numpy

科学计算库——numpy 一、概述 numpy作为高性能科学计算和数据分析的基础包&#xff0c;它是众多数据分析、机器学习等工具的基础架构&#xff0c;掌握numpy的功能及其用法将有助于后续其他数据分析工具的学习。本章将针对numpy库的基础功能进行详细地讲解。 二、数组对象 …

浅述 国产仪器仪表 4455D 4455E 4455F数字示波器

4455系列数字示波器具有12bit垂直分辨率&#xff0c; 5GSa/s最高采样速率&#xff0c;500Mpts/CH存储深度&#xff0c;模拟带宽500MHz、1GHz、2GHz&#xff0c;为您提供高分辨率信号采集与波形分析体验。4455系列数字示波器具有波形自动设置、波形参数自动测量与统计、光标测量…

银行数字化转型导师坚鹏:商业银行大数据风控建模方法与案例

商业银行大数据风控建模方法与案例 课程背景&#xff1a; 数字化背景下&#xff0c;很多银行存在以下问题&#xff1a; 不清楚商业银行大数据风控建模方法&#xff1f; 不清楚银行大数据风控建模应用案例&#xff1f; 不知道银行大数据风控建模核心内容&#xff1f; 课…

【源码解析】Spring事务 @Transactional 源码解析

源码解析 自动化配置 在spring-boot-autoconfigure查看spring.factories引入TransactionAutoConfiguration org.springframework.boot.autoconfigure.EnableAutoConfiguration\ org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration,\查看Tran…

大数据之Spark运行流程

文章目录 前言&#xff08;一&#xff09;Spark On Yarn集群的Client模式运行流程&#xff08;二&#xff09; Spark On Yarn集群的Cluster模式运行流程总结 前言 #博学谷IT学习技术支持# 上篇文章有讨论到Spark On Yarn的两种部署模式&#xff0c;如果有不清楚的地方&#xf…

java ssm高校学术会议论文管理系统

在研究课题--学术会议论文管理系统的实现与设计&#xff0c;对操作使用的便利性&#xff0c;系统的可制定性和安全性以及管理的全面性等多个方面研究。其中主要研究的内容是将学术会议论文管理系统功能划分为: 通知类型、通知信息、部门信息、用户信息用户反馈、会议类型、会议…

JavaScript(JS)-1.JS入门

1.JavaScript概念 (1)JavaScript是一门跨平台&#xff0c;面向对象的脚本语言&#xff0c;来控制网页行为的&#xff0c;它能使网页可交互 (2)W3C标准&#xff1a;网页主要由三部分组成 ①结构&#xff1a;HTML负责网页的基本结构&#xff08;页面元素和内容&#xff09;。 …

4.6 曲线拟合的最小二乘法

4.6.1 最小二乘问题的提法 学习目标&#xff1a; 要学习曲线拟合的最小二乘法&#xff0c;我会按照以下步骤进行&#xff1a; 理解最小二乘法的基本思想和原理&#xff0c;即在已知数据的情况下&#xff0c;通过拟合一条曲线&#xff0c;使得曲线与数据之间的误差最小化。 …

科技创新催生新动能,“云游戏+”打通数字经济任督二脉

配图来自Canva可画 利好政策接连发布&#xff0c;人工智能、云计算等前沿技术席卷各行各业&#xff0c;传统行业网络化、数字化、智能化转型已不可逆&#xff0c;数字经济将迎来大爆发。 国务院发展研究中心市场经济研究所所长王微在中国发展高层论坛2023年年会上表示&#x…

< elementUi组件封装: 通过 el-tag、el-popover、vue动画等实现公告轮播 >

文章目录 &#x1f449; 前言&#x1f449; 一、效果演示&#x1f449; 二、实现思路&#x1f449; 三、实现案例往期内容 &#x1f4a8; &#x1f449; 前言 在 Vue elementUi 开发中&#xff0c;遇到这么一个需求&#xff0c;要实现公告轮播的效果。说实话&#xff0c;一开…

大家进来了解2023年6月CDGA/CDGP数据治理认证考试报名

DAMA认证为数据管理专业人士提供职业目标晋升规划&#xff0c;彰显了职业发展里程碑及发展阶梯定义&#xff0c;帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力&#xff0c;促进开展工作实践应用及实际问题解决&#xff0c;形成企业所需的新数字经济下的核心职业…

多个微服务怎么放入一个tomcat

前言&#xff1a;相信看到这篇文章的小伙伴都或多或少有一些编程基础&#xff0c;懂得一些linux的基本命令了吧&#xff0c;本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python&#xff1a;一种编程语言&…

(一)Linux 环境下搭建 ElasticSearch (CentOS 7)

目录 1、搭建 Linux 相关环境 2、执行解压操作 3、创建新用户 4、修改配置文件 elasticsearch.yml 5、启动 ElasticSearch 6、修改虚拟机配置文件 7、重新启动 ElasticSearch 8、查看是否启动命令 9、访问 ElasticSearch 1、搭建 Linux 相关环境 没有服务器安装VM&a…

Golang每日一练(leetDay0043)

目录 127. 单词接龙 Word Ladder &#x1f31f;&#x1f31f;&#x1f31f; 128. 最长连续序列 Longest Consecutive Sequence &#x1f31f;&#x1f31f; 129. 求根节点到叶节点数字之和 Sum Root-to-leaf Numbers &#x1f31f;&#x1f31f; &#x1f31f; 每日一练…

QML控件和对话框之ApplicationWindows

ApplicationWindows ApplicationWindows应用程序窗口Action菜单类控件3.StatusBar4.工具栏控件类 ApplicationWindows应用程序窗口 Application Window在 Qt Quick Controls中类似于QMain Window 在 Qt/C中的角色&#xff0c;ApplicationWindow可以充当应用程序顶层窗口&#…

气传导耳机是什么原理?气传导蓝牙耳机优缺点分析

气传导耳机&#xff0c;简而言之&#xff0c;就是一种通过空气振动进行声音传播的耳机&#xff0c;采用波束成形技术进行定向传音&#xff0c;开放双耳设计模式&#xff0c;将音频传送到耳朵。 其发声途径&#xff0c;和我们双耳聆听到环境音以及人声的途径都是一样的&#xf…

UART协议——异步全双工串行通信方式

文章目录 前言一、简介1、优点2、缺点 二、数据格式三、波特率1、定义2、波特率和采样频率 四、常见接口电平1、TTL电平2、RS232&#xff08;负逻辑&#xff09;3、RS485 前言 2023.4.22 世界地球日 一、简介 UART&#xff1a;Universal Asynchronous Receiver/Transmitter&a…