C++声明与定义以及初始化,头文件的书写规范

2023-05-16

初始化

初始化:当一个对象被创建的同时获得了特定的值。
1.初始化不是赋值,初始化的含义是创建变量时赋予其一个初始值,而赋值的含义是把对象的当前值擦除,而以一个新值代替;
2.默认初始化:如果定义变量时没有指定初值,则变量被默认初始化,也即编译器给定了一个默认值,该默认值由数据类型和定义的位置决定;
3.显式初始化:即定义变量时给定初始值;
4.绝大多数类都支持无须显式初始化而定义对象,这样的类提供了一个合适的默认值,但是对于内置类型需要格外注意定义的位置;

内置类型变量的初始化

当内置类型变量在定义时没有显式初始化,它的值由定义的位置决定:
1.定义在任何函数体外的内置类型变量被默认初始化为0;
2.定义在函数体内部的内置类型变量将不会被初始化,也即未进行定义,该对象的创建是失败的,如果引用该对象或者用指针指向该对象会引发错误;
3.建议显式初始化每一个内置类型的变量;

声明与定义

1.变量和函数都有声明与定义;
2.不管是函数还是变量,在使用前都必须进行声明;
3.声明告诉编译器变量或函数的类型+名字,不负责开辟存储空间,其存储地址需要编译器去寻找;
4.定义的同时也进行了声明,定义是在声明的基础上为变量或函数开辟了存储空间;
5.任何加上显示初始化式子的声明都是变量的定义,包括extern关键字,如

extern int a = 10;

此时extern的作用就消失了,它仍是个定义;
6.一个变量没有被初始化是未进行定义的;
7.C++中变量或函数可以声明多次,而定义通常只能进行一次,对于变量,如果存在多次定义会引发重定义的错误;对于函数,情况较复杂,其中重定义必须发生在不同作用域下。

extern关键字

在变量或函数前加extern关键字来告诉编译器我们该变量或函数的定义在别的文件中,在这里,我们只是声明一下。

class demo_1
{
public:
	extern int a;
	void test01()
	{
	}
};

上述代码中并没有对变量a进行定义,只是作出声明。

变量声明与定义

1.变量的声明需要指出变量的数据类型和变量名;
2.变量的定义需要指出变量的数据类型、变量名以及初始值,编译器会给变量开辟存储空间;

函数声明与定义

1.函数的声明需要指出数据类型和函数名,通常还加上函数的形参(为了可读性);
2.函数的定义需要指出数据类型、函数名、形参以及函数体;
3.函数的声明和定义很好分辨,仅通过有无花括号就可以分辨;

int test01(int a,double b);//函数声明
int test02(int a,double b)//函数的定义
{
	return 0;
}

4.由于C++编译器是从上到下执行代码的,因此处于main函数下面的函数在主函数的调用它前需要在主函数上方对该函数进行声明;

头文件的书写规范

在C++中,某个源文件包含头文件时,编译器会将头文件的内容拷贝到源文件中。前面提到的定义不能多次进行,如果头文件中包含某项定义,那么多次包含该头文件将会引发重定义的错误。因此在书写头文件需要进行适当处理,使其遇到多次包含时也能安全工作。

预处理器

1.确保头文件多次包含仍能安全工作的常用技术是预处理器,该功能继承于C语言。预处理器是在编译之前执行的一段程序,可以部分地改变我们所写的程序。
2.预处理变量无视C++语言中关于作用域的规则。
3.预处理器的功能包括:#include,头文件保护符。

#include

当预处理器看到#include标记时就会用指定的头文件的内容代替#include。

#include<iostream>//包含标准库头文件
#include"ListNode.h"//包含自定义头文件

头文件保护符

1.头文件保护符:#ifdef, #ifndef, #endif
2.头文件保护符依赖于预处理变量,预处理变量有两种状态:已定义和未定义。
3.#define指令把一个名字设定为预处理变量,另外两个指令则分别检查某个指定的预处理变量是否已经定义:#ifdef当且仅当变量已定义时为真,#ifndef当且仅当变量未定义时为真,一旦检查结果为真,则执行后续操作直至遇到#endif指令为止。

#ifndef LISTNODE_H
#define LISTNODE_H
...
#endif

以上是固定格式,#define不能放在#ifndef前头。

头文件书写的内容

由于头文件用于包含到多个不同的外文件中,因此头文件中通常写变量和函数的声明以及类或结构体的定义。


#ifndef LISTNODE_H
#define LISTNODE_H
using namespace std;
struct ListNode
{
	int val;
	ListNode *next;
	ListNode(int val1, ListNode *next1 = nullptr)
	{
		val = val1;
		next = next1;
	}
};
class List
{
public:
	ListNode *numberList;
	List()
	{
		numberList = nullptr;
	}
	~List()
	{
		ListNode *n;
		while (numberList != nullptr)
		{
			n = numberList;
			numberList = numberList->next;
			delete n;
		}
		cout << "congradgulations!" << endl;
	}

	ListNode *creat(int array[], int len)
	{

		for (int i = 0;i < len;i++)
		{
			numberList = new ListNode(array[i], numberList);
		}
		return numberList;
	}
	void print()
	{
		ListNode *nm = numberList;
		while (nm != nullptr)
		{
			cout << nm->val << endl;
			nm = nm->next;
		}
		cout << "hello" << endl;
	}
};
class Solution {
public:
	ListNode* removeElements(ListNode* head, int val)
	{
		ListNode* dummyHead = new ListNode(0);
		dummyHead->next = head;
		ListNode* cur = dummyHead;
		while (cur->next != NULL) {
			if (cur->next->val == val) {
				ListNode* tmp = cur->next;
				cur->next = cur->next->next;
				delete tmp;
			}
			else {
				cur = cur->next;
			}
		}
		head = dummyHead->next;
		delete dummyHead;
		return head;
	}
};
void creat(int array[], int len);
void print();
struct ListNode;
class List;
ListNode* removeElements(ListNode* head, int val);


#endif


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++声明与定义以及初始化,头文件的书写规范 的相关文章

  • WIFI原理

    1 路由器向下提供给接入的用户一个id xff0c 也就是类似于192 168 1 231 xff0c 这样的ip地址 xff0c 所有在这个路由器下的用户的ip地址的前面的网络号是相同的 xff0c 都是192 168 1 xff08 x
  • :: 在 C++ 中的作用

    一 作用域符号 xff1a 作用域符号 的前面一般是类名称 xff0c 后面一般是该类的成员名称 xff0c C 43 43 为例避免不同的类有名称相同的成员而采用作用域的方式进行区分 另外 xff0c 在类外定义类中已申明的函数成员时 x
  • PX4-4-任务调度

    PX4所有的功能都封装在独立的模块中 xff0c uORB是任务间数据交互和同步的工具 xff0c 而管理和调度每个任务 xff0c PX4也提供了一套很好的机制 xff0c 这一篇我们分享PX4的任务调度机制 我们以PX4 1 11 3版
  • 基于stm32的mpu6050传感器实验

    64 TOCMPU6050 43 STM32学习笔记 学习了差不多两天的mpu6050 xff0c 参考了很多篇博客还有看一些资料 xff0c 今晚终于把这个东西在我的串口显示出来了 xff0c 下面就废话不多说 xff0c 开始我的笔记啦
  • Ubuntu 20.04 ROS Noetic及Realsense-ROS的安装和多机通信

    Ubuntu 20 04 ROS Noetic及Realsense ROS的安装和多机通信 1 Ubuntu20 04 ROS Noetic安装 参考官方安装教程 ROS Installation 请以以上安装步骤为准 xff0c 因为随着
  • 机械硬盘基本知识

    硬盘内部的物理结构很复杂 xff0c 只能从大的颗粒度去看内部的结构 xff0c 总体来说 xff0c 硬盘结构包括 xff1a 盘片 磁头 盘片主轴 控制电机 磁头控制器 数据转换器 接口 缓存 等几个部份 所有的盘片 xff08 一般硬
  • RTK八大基础知识

    RTK作为现代化测量中的测绘仪器 xff0c 已经非常普及 RTK在测量中的优越性也是不言而喻 为了能让RTK的优越性能在使用中充分的发挥出来 xff0c 为了能让RTK使用人员能灵活的应用RTK xff0c 我认为RTK使用人员必须了解以
  • 游戏思考04:网络游戏同步算法产生原因和相关介绍:跟随(插值)、预测、延迟补偿,三种算法(未完待续02/07)

    文章目录 一 网络同步的典型场景二 简单粗暴的数据同步为何行不通 xff1f xff08 帧同步的难题 xff09 1 xff09 网络同步的流程2 xff09 网络延迟和抖动的直观解释3 xff09 产生卡顿 瞬移的原因分析4 xff09
  • 51单片机定时器实现流水灯实验

    实验内容 xff1a 利用AT89C51的定时器0 方式1实现流水灯效果 xff0c 并用仿真验证 定时器0方式1的工作方式 xff1a 定时器的工作方式选择由寄存器TMOD控制 方式选择通过M0和M1控制 xff0c 方式1为16位定时器
  • 51单片机七段数码管显示时钟无按键控制—①—74HC595版

    参考链接 xff1a 51单片机七段数码管显示时钟加按键控制 74HC595版 51单片机七段数码管显示时钟加按键控制 74HC595版 文章目录 一 实验内容 xff1a 二 实验分析 xff1a 三 仿真图 xff1a 四 源代码 xf
  • 51单片机lcd1602显示时间日期

    实验内容 xff1a 使用51单片机控制LCD1602液晶显示屏显示 时间 日期 星期 温度 信息 xff0c 并可通过按键设置值 仿真效果展示 xff1a proteus仿真图 xff1a 硬件测试图 xff1a 说明 xff1a 硬件测
  • 51单片机实现普通时钟

    一 实验内容 xff1a 1 打开单片机 xff0c 数码管显示当前时间0 0 0 xff0c 时 分 秒 xff08 时间为24小时制 xff09 2 按键1 xff1a 按下一次进入秒的修改 xff0c 按下两次修改分钟 xff0c 按
  • No suitable kits found.——QT创建项目错误

    才开始学QT就遇到一个问题 xff0c 无法创建项目 xff0c 在 Kits 这一步提示 No suitable kits found 我的错误原因 xff1a 因为以前装过MinGw环境 xff0c 而且环境里还包含着中文 xff0c
  • Keil5高亮显示相同变量加上护眼配色方案

    先上效果图 xff1a 我们知道 xff0c 之前版本的Keil是不会对相同代码进行高亮显示的 xff0c 不过现在最新版的Keil已经支持对其高亮显示了 xff0c 只不过其配色还是和原来一样有些差强人意 初始效果如下 xff1a 实现上
  • 螺旋队列公式解释

    以1为坐标零点 xff0c 向右为X正 xff0c 向下为Y正 xff0c 任意输入一坐标 xff08 x y xff0c r 61 max x y 为当前所在层数 xff0c 得到下面公式 上边 xff1a top 61 max r 43
  • Bilibili缓存视频在电脑端直接打开方式

    哔哩哔哩移动端缓存的视频和音频分开了 xff0c 使用PotPlayer播放器可以在播放视频的时候加载音频 xff0c 从而不用合并两个文件 具体操作 xff1a 使用PotPlayer播放器打开video m4s文件 打开后点鼠标右键 x
  • C语言数组、结构体、结构体数组作为函数参数

    数组作为函数参数 如果想把一个数组名参数传递给函数 xff0c 正确的函数形参应该是怎样的 xff1f 它是应该声明为一个指针还是一个数组 xff1f 调用函数时实际传递的是一个指针 xff0c 所以函数的形参实际上是一个指针 xff0c
  • 有道词典离线数据包位置

    软件版本 xff1a 9 1 0 位置 xff1a C Users 用户名 AppData Local Yodao DeskDict nmt model 将离线包放入nmt model文件夹后重新启动有道词典即可断网使用长句翻译 汉英互译离
  • 改变Keil5所有窗口的背景颜色

    在网上找了很多都没有找到如何更改Keil5左侧和下侧的背景颜色 xff0c 后来根据一些提示找到了改背景的方法 xff0c 在此分享给有需要的人 首先 xff0c 更换中间那块的背景颜色相信大家都会 xff0c 不过我还是写一下 xff0c
  • ros入门(题尾一键安装)

    运行ros 96 提示 xff1a 因为手头有英伟达树莓派跟激光雷达 xff0c 也有ros小车 直接上现成的 xff0c 但是会卡 而且不好用 xff0c 所以建议自己安装一个 链接 xff1a https pan baidu com s

随机推荐

  • git 基础

    git可以实现分布式的版本管理 xff0c 合作开发工具 github和gitee是代码托管平台 查看配置信息 xff1a git config list 1 我们可以通过下面两条命令配置名字和邮箱 xff0c 使代码提交有迹可循 配置名字
  • idf.py基本使用

    1 idf py set target lt target gt 设置构建项目的目标 xff08 芯片 xff09 2 idf py menuconfig 运行menuconfig工具配置项目 3 idf py build 构建在当前目录下
  • rviz更改机器人位置,不考虑gazebo环境。

    文章目录 问题描述解决方案 问题描述 在RVIZ中想要去更改机器人模型位置 xff0c 但不想考虑gazebo的各种因素 xff0c 只想通过别人给的数据流去实时更改机器人在rviz中的位置 解决方案 首先 xff0c 先将原理弄清楚 在R
  • STM32+RTC实现时钟无法设置时间以及掉电时间清零的问题

    最近在实现一个万年历的功能 xff0c 其中遇到了无法设置时间以及掉电时间清零的问题 h文件代码如下 xff1a span class token macro property span class token directive keyw
  • contains an incorrect path解决方法

    在移植UCOS 时出现如下报警 在确认头文件路径添加无误的情况下 xff0c 发现是因为文件名的UCOS 这个3不应用罗马数字 xff0c 用字母I代替 xff0c 改为UCOSIII并重新添加文件后错误消失
  • 理论 - 半波偶极子天线原理与计算

    概述 半波偶极子天线是一种结构简单的基本线天线 xff0c 也是一种经典的 迄今为止使用最广泛的天线之一 半波偶极子天线由两根直径和长度都相等的直导线组成 xff0c 每根导线的长度为1 4个工作波长 导线的直径远小于工作波长 xff0c
  • HFSS - 半波偶极子天线的设计与仿真

    一 理论计算 原理及理论计算部分可以看我上一篇文章理论 半波偶极子天线原理与计算 二 模型创建 1 模型概图如下 2 变量参数 变量意义变量名变量值 单位 mm 工作波长wavelength100天线总长度length0 48 x wave
  • STM32关于驱动段码屏显示

    本篇文章主要记录一下我在工作中用STM32单片机驱动段码屏显示内容 xff0c 不讲解具体的驱动原理 xff0c 只是单纯记录如何编写驱动屏幕图标显示的代码 xff0c 以便我日后查看 单片机 xff1a STM32L152RCT6A ID
  • HFSS - 同轴馈电矩形微带天线设计与仿真

    一 设计指标 中心频率 xff1a 2 45GHz介质板相对介电常数 xff1a 4 4介质板厚度 xff1a 1 6mm馈电方式 xff1a 50 Omega 同轴线馈电 二 同轴馈电微带天线设计 同轴线馈电的矩形微带天线结构如下图所示
  • HFSS - 圆极化矩形微带天线设计与仿真

    xff08 这个仿真了好久啊啊啊啊啊 xff0c 搞得这么晚 xff0c 哭辽 xff09 一 设计指标 设计一个右旋圆极化GPS天线 中心频率 xff1a 1 575GHz轴比 xff1a 中心频率处圆极化波小于2dB馈电方式 xff1a
  • HFSS - 倒F天线的设计与仿真

    一 倒F天线概述 倒F天线是单极子天线的一种变形结构 xff0c 其衍变发展的过程可以看成是从1 4波长单极子天线到倒L天线再到倒F天线的过程 xff0c 如下图所示 首先 xff0c 将单极子天线进行90 弯曲 xff0c 就能得到倒L天
  • 理论 - 平面倒F天线(PIFA)

    一 概述 PIFA Planar Inverted F shaped Antenna 天线即平面倒F形天线 xff0c 因为整个天线的形状像个倒写的英文字母F而得名 多年来 xff0c 多数手机天线都一直沿用这种传统的PIFA天线设计方案
  • HFSS - GSM 900 单频PIFA天线的设计与仿真

    一 设计指标 中心频率 xff1a 920MHz回波损耗带宽 xff1a 大于80MHz 各个参数变量如下表 变量意义变量名变量初始值 xff08 单位 xff1a mm xff09 天线高度H10辐射金属片长度L155辐射金属片宽度W13
  • HFSS - GSM 900 和 DCS 1800 双频PIFA天线的设计与仿真

    一 概述 PIFA天线可以采用在辐射金属片上开槽的技术来实现双频和多频段工作 采用如下图所示的U形开槽方案来实现PIFA天线在GSM 900和DCS 1800 两个频段上的工作 其中 xff0c 在GSM 900频段 xff0c 信号上行频
  • HFSS - 矩形口径喇叭天线的设计与仿真

    一 理论 喇叭天线是一种应用广 泛的微波天线 xff0c 其优点是结构简单 xff0c 频带宽 xff0c 功率容量大 xff0c 调整与使用方便 合理地选择喇叭尺寸 xff0c 可以获得良好的辐射特性 相当尖锐的主瓣 较小副瓣和较高的增益
  • 【record】1、FS-I6设置与对码

    官方说明文档 先贴一张官方的说明文档 xff1b 注意的点 xff1a 遥控器设置中 xff0c 按住CANCEL保存 xff1b 遥控器设置 xff08 1 xff09 恢复出厂设置 这里我对FS i6直接恢复出厂设置 xff0c 当然可
  • keil无法观察局部变量

    keil观察局部变量的时候 xff0c 发现总是显示not in scope xff0c 是优化级别过高 xff0c 降低优化级别即可
  • rplidar连接计算机显示process has died.....解决方法

    检测是否打开roscore可能是串口未赋予权限 xff0c 解决方法 xff1a sudo chmod 777 dev ttyUSB0
  • ST-LINK/V2:cannot reset target shutting down debug session

    使用 ST LINK V2 为 STM32 下载程序时 xff0c 总是不成功 xff0c 并弹出如下对话框 xff1a 解决方法 xff1a 打开 MDK 的安装目录下的 STLink xff0c 如下是我的路径 xff1a D mdk5
  • C++声明与定义以及初始化,头文件的书写规范

    初始化 初始化 xff1a 当一个对象被创建的同时获得了特定的值 1 初始化不是赋值 xff0c 初始化的含义是创建变量时赋予其一个初始值 xff0c 而赋值的含义是把对象的当前值擦除 xff0c 而以一个新值代替 xff1b 2 默认初始