《Visual C++ 2010入门经典》(第五版)-第七章 自定义数据类型

Visual C++2010入门经典 中文版(选章) 函数是C++中实现特定功能的代码块,它们可以被声明和定义。函数的声明指定了函数的名称、返回类型和参数列表,而定义则提供了函数的具体实现。声明通常放在头文件中(.h 或 .hpp),定义则放在源文件中(.cpp)。// 函数声明// 函数定义在上述代码中,add函数被声明为接受两个整型参数并返回一个整型值。其定义给出了函数如何执行加法的具体实现。通常,函数声明用于告诉编译器函数的存在及如何调用它,而函数定义则实际编写了执行的代码。在C++中,类是构建面向对象程序设计的基本单位。 阅读详情

为什么要引入静态数据成员?

主要原因是为了取代全局变量,让类的所有对象共享数据。


7.9类的静态成员

7.9.1 类的静态数据成员

当将类的某个数据成员声明 为static时,将只能定义一次静态数据成员,而且要被同类的所有对象所共享。各个对象都拥有类中每一个普通成员变量的副本,但每个静态数据成员只有一个实例存在,与定义了多少类对象无关。


class CBox

{

public:

    CBox();

     ~CBox();

     static int objectCount;


private:

      double length;

       double width;

       double height;

}


静态数据成员的用途之一是统计实际存在多少个对象;

不能在类定义中初始化静态数据成员,类定义只是描述对象的蓝图,不允许在其中指定初始值。我们也不想在构造函数中初始化该成员,因为我们的意图是每当调用构造函数时候就使其递增,以便累计已创建的对象数量。

不能在另一个成员函数中初始化,因为成员函数与对象相关,我们希望在创建任何对象之前初始化该成员。答案是用下面这条语句,在类定义外面进行静态数据尘缘的初始化:

int CBox::objectCount=0;

注意:

这里没有static关键字,不过,确实需要使用类名和作用域解析运算符来限定成员名,以使编译器理解我们在引用类的静态成员。不然,编译器以为我们只是在创建一个与类毫不相干的全局变量而已。

实际编程出的问题分析:

1.创建一个控制台的空项目;

2.创建一个类CBox,文件对应Box.cpp和Box.h

Box.h内容如下:

#pragma once


class CBox
{
public:
static int objectCount;
CBox(void)
{
objectCount++;
}
~CBox(void);






private:
int a;
int b;
int c;




};

int CBox::objectCount = 0;// 类的静态数据成员变量初始化


Box.cpp内容如下:

CBox::~CBox(void)
{
}


main.cpp文件内容如下:



#include "iostream"
#include "Box.h"
int main()
{
CBox temp;
int iCount = temp.objectCount;
std::cout<<iCount;


  return 0;
}


程序编译出错,提示如下:

1>main.obj : error LNK2005: "public: static int CBox::objectCount" (?objectCount@CBox@@2HA) 已经在 Box.obj 中定义
1>C:\Users\a\Desktop\testCountObject\Debug\testCountObject.exe : fatal error LNK1169: 找到一个或多个多重定义的符号


原因:类的静态数据成员在类内声明以后,需要立即在类外进行初始化;mail.cpp中包含了#include "Box.h",本身Box.h中也包含了

int CBox::objectCount = 0;,结果导致obj里面重复定义,解决办法:将静态成员变量的初始化放到.cpp文件中



7.9.2类的静态函数成员


通过将某个函数成员声明为static,将使该函数独立于本类的任何具体对象。从静态函数内部引用类成员,必须使用限定名进行(就像使用普通全局函数访问公有数据成员那样)。

静态成员函数的优点是:即使本类的任何对象都不存在,它们也能存在并被调用。这种情况下,静态成员函数只能使用静态数据成员,因为后者是唯一存在的数据成员。因此,即使不能肯定是否有类对象存在,也可以调用类的静态函数成员来检查静态数据成员。这样,即可使用静态成员函数来确定是否已经创建本类的对象,或者实际创建的数量。





Visual Studio C++ 2010 快速入门指南 Visual Studio C++ 2010是一个强大的集成开发环境(IDE),专门设计用于C++语言的开发。这个版本支持先进的项目类型,包括Win32、MFC、ATL、WTL和CLR,它为开发者提供了一套完整的工具集,从代码编写到调试,再到性能分析,所有功能都在一个界面内实现无缝集成。它不仅包括对C++语言的增强,还提供了丰富的库和工具来帮助开发者构建高性能的应用程序。在自定义安装选项中,用户可以根据自己的需求来选择安装不同的组件。 阅读详情

相关推荐

Visual_C++2010入门经典_第5版(中文版)

Visual_C++2010入门经典_第5版(中文版) Visual_C++2010入门经典_第5版(中文版)

vs2010在64位系统下常见数据类型的字节数

每台计算机都有一个字长,指明整数和指针数据的标称大小。对于一个字长为w位的机器而言,虚拟地址的范围就是0~2^w-1。所以,64位机的指针变量占64位(8字节),32位机的指针变量占4字节。 但是,整数int型,在32位下占4字节,在64位下却没有长到8字节,目的就是为了兼容32位的程序。 平台 short int long float double 64位

coopris的博客 3699

《Visual C++ 2010入门经典(第5版) 》源码

《Visual C++ 2010入门经典(第5版) 》源码

大数据VS小数据:9种数据类型及利用方法

如今,具有压倒性的数据量使得市场营销人员和广告商们已经难以理解哪些信息非常重要,哪些信息是纯粹的噪音,哪些数据是正确的?而哪些数据又是可以信赖的?不同类型的数据具有什么作用,又应该如何被使用?下面笔者根据专注以数据为基础的多渠道营销自动化智能化机构webpower的数据客观可信度排名,给大家介绍9种不同类型的数据,以及它们应该如何被有效使用。1、试验性数据通过客观的专业第三方精心设计和严格控制的试...

bingdata123的博客 4408

Visual C++2010入门经典(第5版)练习答案及书内例程

《Visual C++2010入门经典(第5版)》作者ivor horton采用了容易理解的讲授方法,并提供了详尽的示例,使读者很快就可以成为一名优秀的C++程序员。本文档为此教程内涉及的例程及课后练习答案,供学习者参考!

Visual C++ 2010入门经典 英文文字原版

本书系编程语言先驱者Ivor Horton的经典之作,是C++编程方面最畅销的图书品种之一,不仅涵盖了Visual C++ 2010编程知识,还全面介绍了标准C++语言和C++/CLI

VC++常用数据类型及其操作详解

一.VC常用数据类型列表 二.常用数据类型转化 2.1数学类型变量与字符串相互转换 2.2 CString及string,char *与其他数据类型的转换和操作 ●CString,string,char*的综合比较 ●数学类型与CString相互转化 ●CString与char*相互转换举例 ...

chenqunan3231的博客 453

13-单片机模块化程序: 单片机AT指令配置模块程序模板(非阻塞版)

资料源码:https://gitee.com/yang456/OpenProgrammingModuleForMCU.git 点击加入群聊【单片机,物联网,上位机】: 说明1:知识从未如此性感。 烂程序员关心的是代码,好程序员关心的是数据结构和它们之间的关系! 说明2:学的是思想,而非程序!此代码思路适用于所有的单片机。 说明3:学会以后,下面的代码可能会跟你一辈子! 说明4:这一系列文章是为大幅度裁剪本人博客文章!使博客文章更有条理。便于推其它教程! 拷贝这两个文件到自己的工程 ..

杨奉武的博客 1281

Microsoft Visual C++2010安装教程并编写入门案例

目录 一、下载安装包 二、安装步骤 (1)下载安装包,解压文件 (2)以管理员身份运行setup.exe安装程序 (3)点击下一步 (4)选择同意协议,然后下一步 (5)选择软件安装目录,然后点击安装 (6)稍等几分钟,就可以安装完成 (7)软件安装成功,点击退出 三、打开软件,发送到桌面快捷方式 (1)按快捷键(win+s),搜索2010 (2)右键打开文件位置 (3)右键选择文件,发送到桌面快捷方式 (4)然后,桌面上就快捷方式 (5)打开软件,进入到软件主界面...

猿小白的博客 4万+

EV1527 vs HS1527:固定码芯片的STM32解码避坑指南

本文深入解析EV1527与HS1527固定码芯片的技术差异,提供基于STM32的完整解码方案与稳定性优化策略。通过硬件接口配置、状态机实现及示波器诊断,解决工业遥控、安防报警等场景中的解码难题,特别针对时序差异和干扰问题给出实用解决方案。

o0p1q2r3的博客 331

vue3 - 详细实现用户收货地址识别解析“姓名/手机号/省市区/街道/乡镇村庄“关键字,用户复制粘贴一段含有姓名电话/详细地址的文字文本信息,vue3自动识别拆分并填入到对应表单字段中,详细示例代码

vue3,nuxt3,快递地址读取,收货地址解析、快递地址解析、物流地址解析自动识别,收货地址解析,从发货地址中拆出姓名电话地址,根据粘贴的字符串提取姓名地址,vue3地址信息自动识别,ts,vue3智能识别地址,提取姓名电话地址信息,自动识别出省市区街道姓名手机号等,根据文本自动解析出收货信息,怎么识别文本中的手机号,粘贴板地址识别,地址智能识别,如何识别收货地址中的关键字,粘贴一段文字后,自动识别到姓名/手机号/收货地址,vue3仿淘宝地址智能识别解析实现,省市区街道智能解析,vue3收货地址,识别地址

✅ 精选推荐文章 5502

MicrosoftVisualStudioC2010入门经典完全版.pdf下载介绍:快速掌握Visual Studio C++ 2010的必备教材

MicrosoftVisualStudioC2010入门经典完全版.pdf下载介绍:快速掌握Visual Studio C++ 2010的必备教材 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在编程学习的过程中,选择一本适合的入门教材至关重要。《Microsoft Visual Studio C++ 2010入门经典》完全版.pdf 是一款专为编程爱好者量身打造的经...

gitblog_06780的博客 1132

微信小程序 - 解决请求报错 request:fail errcode:-201 cronet_error_code:-201 error_msg:net::ERR_CERT_DATE_INVALID

微信小程序报错“request:fail errcode:-201 cronet_error_code:-201 error_msg:net::ERR_CERT_DATE_INVALID“,微信小程序请求报错,微信小程序errcode:-201,服务器报错,无法调用接口,微信小程序真机https请求失败,微信小程序wx.request接口报错,小程序真机调试运行接口都报错了,真机测试下网络请求都不行了且报错,证书没问题依旧报错,检查HTTPS证书,ssl证书,使用浏览器测试访问证书是正常的,不是证书问题,请

🏆 前端领域优质创作者 1万+

如何下载Visual C++ 2010 学习版(即 Visual C++ 2010 Express)

2018年全国计算机二级 C、C++两个科目的应用软件由 Visual C++6.0 改为 Visual C++ 2010 学习版(即 Visual C++ 2010 Express),这个软件的中文版怎么下呢? 1.打开Chrome浏览器 在网址一栏输入www.microsoft.com,像这样:2.进入 3.点击“所有Microsoft”,再点“Visual Studio” 4.进入之后点...

weixin_43462804的博客 5万+

工业级Modbus ASCII实时监控系统(WinForms完整实现)

本文介绍了一个基于WinForms的工业级Modbus ASCII实时监控系统实现方案。该系统采用经典工控界面布局,包含串口配置、数据采集控制和实时数据显示三大区域。核心功能包括:串口通信参数设置、Modbus从站地址配置、寄存器数据采集、实时数据表格展示和趋势图绘制。系统通过ModbusAsciiClient类实现通信核心,采用定时器轮询机制采集数据,支持最多100个数据点的历史趋势显示。界面设计注重用户体验,配置区位于左侧,主显示区在右侧,底部为状态和日志区,符合工业控制系统的操作习惯。代码示例展示了窗

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 279

元学习与Transformer的结合:Meta-Transformer架构解析

我们生活在一个信息爆炸的时代,每天都会产生海量的数据。在深度学习领域,如何让模型更高效地学习、更快地适应新的任务,一直是科学家们努力的方向。元学习和Transformer都是深度学习中的重要概念,它们各自有着独特的优势。本文的目的就是深入剖析将元学习和Transformer结合起来的Meta - Transformer架构,探讨它的原理、应用以及未来发展。我们会从基础概念讲起,逐步深入到架构的各个方面,让大家对Meta - Transformer有一个全面的了解。

AI智能探索者的博客 1052

【免费下载】 Visual C++ 2010 学习版

欢迎来到Visual C++ 2010学习版资源页。本页面提供了专为编程初学者和对C++语言感兴趣的学习者准备的资源包——`Visual C++ 2010学习版.zip`。Visual C++ 2010是一款由Microsoft开发的集成开发环境(IDE),它支持C++编程语言,广泛应用于桌面应用程序的开发。此学习版旨在帮助用户在无需购买专业许可的情况下,快速入门C++编程世界。 ## 资源说明

gitblog_09737的博客 2万+

目标检测基础

目标检测是计算机视觉的核心任务,需同时对图像中的物体进行定位与识别。传统方法存在速度慢、精度低等问题,而深度学习显著推动了该领域发展,使实时高精度检测成为可能。检测的核心是为每个物体预测边界框坐标和类别标签。为实现高效检测,引入了锚框机制,通过预设多尺度、多宽高比的候选区域,缩小预测偏移量,提升定位精度。训练时,通过计算锚框与真实边界框的交并比 (IoU) 确定正负样本,并基于此生成类别标签和坐标偏移量作为监督信号。该方法提升了检测器对多尺度目标和复杂场景的鲁棒性。

盼小辉丶的博客 2765

探索编程新世界:《Visual C++ 2010入门经典.pdf带书签版》

探索编程新世界:《Visual C++ 2010入门经典.pdf带书签版》 去发现同类优质开源项目:https://gitcode.com/ 项目核心功能/场景 深入浅出学习Visual C++ 2010,轻松掌握编程基础与开发环境。 项目介绍 《Visual C++ 2010入门经典.pdf带书签版》是一部专为编程初学者打造的全面教程。本书由知名编程入门教程作家【美】Ivor Horton撰写,...

gitblog_06702的博客 973

网络工程师教程第6版(2024年最新版)

本书 根据《网络工程师考试大纲》(2024年审定通过)编写,对网络工程师岗位所要求的主要知 识及应用技术进行了阐述。本书主要内容包括数据通信、局域网、无线通信网、网络互连、网络安全、网络操作系统与应用服务器、组网技术、网络管理、网络规划和设计。本书是参加网络工程师考试的必备教材,也可作为网络工程从业人员学习网络技术的教材或日常工作的参考用书。王涛和严体华编写了第2章、第3章和第4章;网络工程师教程(第6版)由清华大学出版社出版,由工业和信息化部教育与考试中心组编,张永刚、王涛、高振江任主编,具体介绍如下。

鹿鸣天涯 6907

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Visual C++ 2010 入门经典

Visual C++ 2010 入门经典 第二章 数据、变量和计算 2.2 定义变量 变量名包含字母、数字、下划线,必须以字母或下划线开头,不允许空格,区分大小写。变量是一段内存,可引用和存储数据 变量声明也属于定义(特殊情况除外) int value; %既是声明也是定义 声明是将名称以及这个名称用途的信息引入程序;定义设计分配这个名称的计算机内存 变量初始化

QuantumCodes的博客 978

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

《Visual C++ 2010入门教程》

系列一:关于Visual Studio、VC和C++的那些事   写在前面         在我还在上学的时候,我选择了C++,最初我用VC6作为我的IDE,我看过很多本C++的教材,有的适合我,有的不适合我,其中有一本叫《Visual C++ 2005入门经典》的书帮了我不少的忙。因为通常的C++教材都只会介绍C++的语法什么的,很少会告诉我们如何去编译、运行,告诉我们什么是控制

chinaliping的专栏 6万+

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

优快云著名技术专家Visual C++2010开发体验心得——从Visual C++6.0到Visual C++2010见证VC++辉煌时刻

    IT业是一个创造奇迹的行业,IT业也是一个年轻的行业,IT业更是一个不断更新的行业。在2009年,微软已经连续推出Visual Studio2010 beta1 与 Visual Studio2010 beta2 两个版本.目前Visual Studio2010的RC版已经发布, RC版本已经展示了Visual Studio2010的所有新特性与革新,自从Visual Studio

尹成的技术博客 1万+
上一篇: 《高质量C/C++》函数设计
下一篇: 静态成员变量初始化问题。关于 error LNK2005 static int:已经在***.obj中定义
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值