【No.7 C++对象的构造与析构时间】

==【注意】==
程序语言只是我们与计算机交流并让计算机实现我们创造性思想的工具,可以并鼓励深入掌握一门语言,但千万别沉迷于钻某种语言的牛角尖,一定要把握好二者间的度

本帖属不定时连载贴,以试卷的形式提出一个比较基础的问题供大家思考讨论,问题的解析将在下一更新贴中一并给出,这样做是希望还不清楚问题的朋友有自己思考和讨论的时间,希望大家能从这些帖子中有所收获。

贴中问题属我在学习C\C++过程中遇到的一些语法或者比较隐晦的程序问题,其中有自己的总结,也不乏网络上搜索到的经典解析,在此分享给大家,希望能起到抛砖引玉的作用

我已认真检查过自己的帖子,但难免有疏忽,如大家在阅读过程中仍发现有问题,请及时通知,我会及时更正,以免误导大家,万分感谢^_^



【No.7  C++对象的构造与析构时间】

由于连载形式,每帖第二部分都配有上一问题的解答。为了保持帖子的针对性和一致性,此贴仅供交流讨论本次问题若大家对上一问题有任何疑问,请通过解答末尾的传送链接前往该问题贴回复讨论

[问题No.7]
请写出以下代码的执行结果
复制内容到剪贴板
代码:
#include<iostream>
using namespace std;

//-------------------------------------------------
class Foo
{
  public:
    Foo(void)
    {
      cout<<"constructing..."<<endl;
      ++_counter;
    }
    Foo(const Foo &p)
    {
      cout<<"copy constructor..."<<endl;
      ++_counter;
    }
    ~Foo(void){ cout<<"destructing..."<<endl; }
  
  public:
    static int _counter;
};

int Foo::_counter = 0;

//---------------------------------------------
Foo global;

Foo Trap(Foo foo)
{
  Foo local = foo;
  Foo *heap = new Foo(global);
  *heap = local;
  Foo pa[4] = { local, *heap };
  return *heap;
}

int main(int argc, char **argv)
{
  Foo p;
  Trap(p);

  cout<<Foo::_counter<<endl;

  return EXIT_SUCCESS;
}


No.6 switch的陷阱
输出结果
0

问题浅析
本题出错,大多是由于初学者自己主观臆断switch-case块的执行方式,此题中,i == 1,有的午饭就主观地认为case 1:分支被执行,x = 5,然后输出为5.但是,switch-case语句的陷阱就在这里,case分支不是if-else这样的非此即彼的判断语句,case只是一个入口,i == 1时,找到入口case 1:,因此执行这个入口之后的所有语句,直到swtich语句块结束。
那么如何杜绝此问题的发生呢?见如下代码
复制内容到剪贴板
代码:
swtich(i)
{
  case 1: x = 5; break;
  case 2: ++x; break;
  case 3: ++x; break;
  default: break;
}

只要执行了一条分支语句就break出switch语句块,这样就实现了我们之前臆断的程序功能,并且,如果不是有意要执行多个case分支,请时刻记住,每一个case分支(包括default)后都应该填上break语句,并且不管你有没有必要写default分支,也请写上,并break,这样做是是程序的可读性得到保障, 以免别的程序员误以为你忘记了default情况的处理。





     本文转自Bill_Hoo 51CTO博客,原文链接:http://blog.51cto.com/billhoo/733265,如需转载请自行联系原作者


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

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

相关文章

mysql按月进行表分区

数据库 mysql 单表数据量达到千万、亿级&#xff0c;可以通过分表与表分区提升服务性能。 现有表accounting&#xff0c;4亿条数据&#xff0c;数据访问方式为insert与select&#xff0c;select为按月访问&#xff0c;为减少数据与程序变更&#xff0c;采用表分区的方式。 数据…

C语言试题七十一之请编写函数求出这个数的阶乘

📃个人主页:个人主页 🔥系列专栏:C语言试题200例目录 💬推荐一款刷算法、笔试、面经、拿大公司offer神器 👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 编写函数:…

MFC 直线 虚线 折线 圆 椭圆 矩形 弧形

****Dlg.h头文件加入&#xff1a; //为project加入画笔、点变量数组 public:CPen m_pen[5];CPoint m_point[5]; public:void DrawLine(CDC *pDC);void DrawPolyline(CDC *pDC);void DrawPolygon(CDC *pDC);void DrawRect(CDC *pDC);void DrawRoundRect(CDC *pDC);void DrawElli…

最近无埋点技术很是流行,抽空研究了下诸葛IO,talkingData以及百分点这些业内知名公司的无埋点SDK,抽取其中重要的信息供大家参考:

1、首先什么是无埋点呢&#xff0c;其实所谓无埋点就是开发者无需再对追踪点进行埋码&#xff0c;而是脱离代码&#xff0c;只需面对应用界面圈圈点点即可追加随时生效的事件数据点。 无埋点的好处 其实无埋点并不是完全不用写代码&#xff0c;而是尽可能的少写代码。开发者将S…

【Pix4d精品教程】pix4d mapper相机未校准后手动添加连接点完美案例图文教程

pix4d mapper相机未校准后手动添加连接点完美案例图文教程 整体预览 局部放大 如图所示,红色的照片为未校准的图片,软件无法自动获取连接点,有关相机未校准的原因及解决办法,可以参考《pix4d未校准相机:287 out of 402 images calibrated (71%), all images enabled, 6 bl…

五、构造函数《2022 solidity8.+ 版本教程到实战》

一、构造函数 构造函数存在于很多语言中&#xff0c;可用于对当前对象在第一次创建时的初始化设置。在 solidity 合约中&#xff0c;也存在对应的构造函数&#xff0c;使用 constructor(){} 对其进行定义。 以下在合约中创建一个最简单的构造函数代码&#xff1a; // SPDX-L…

Blazor University (30)表单 —— 从 InputBase 派生

原文链接&#xff1a;https://blazor-university.com/forms/descending-from-inputbase/从 InputBase 派生源代码[1]InputBase<T> 组件是各种 Blazor 输入控件所继承的抽象类。这个类在标准 HTML <input> 元素的基础上增加了额外的功能&#xff0c;比如验证——我们…

3.菜鸟教你一步一步开发 web service 之 axis 服务端创建

转自&#xff1a;https://blog.csdn.net/shfqbluestone/article/details/37610601 第一步&#xff0c;新建一个工程&#xff0c;如图&#xff1a; 选 Java 写一个工程名&#xff0c;选择好工程路径&#xff0c;点下一步 选择 webServices &#xff0c;在右边的 version 中选择 …

C语言试题七十二之请编写函数判断三角形的类型,并输出其面积和类型。

📃个人主页:个人主页 🔥系列专栏:C语言试题200例目录 💬推荐一款刷算法、笔试、面经、拿大公司offer神器 👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 编写函数:…

ArcGIS实验教程——实验三十四:ArcGIS地统计分析全解(直方图、正态QQ图、趋势分析、voronoi图、半变异函数、协方差云)

ArcGIS实验视频教程合集:《ArcGIS实验教程从入门到精通》(附配套实验数据)》 文章目录 一、地统计分析的基本原理二、地统计分析的工作流程三、探索性空间数据分析工具1. 直方图2. QQ分布图3. 趋势分析4. Voronoi图5. 半变异函数与协方差云6. 交叉协方差云四、空间插值一、地…

四则运算

四则运算的生成代码&#xff08;C语言&#xff09; 学生&#xff1a;徐克 夏嘉晖 1 #include<stdio.h> 2 #include<stdlib.h> 3 main() 4 { 5 int a[50]; 6 int b[50]; 7 int num,count,i; 8 printf("1.加法\n"); 9 printf("2.减法…

用python计算圆周率

一、算法 马青公式&#xff1a;马青公式由英国天文学教授约翰马青(John Machin &#xff0c;1686 –1751)于1706年发现。马青公式每计算一项可以得到1.4位的十进制精度。因为它的计算过程中被乘数和被除数都不大于长整数&#xff0c;所以可以很容易地在计算机上编程实现。 二、…

六、数组及其操作《2022 solidity8.+ 版本教程到实战》

一、数组 在 solidity 中&#xff0c;数组分为定长数组和动态数据&#xff0c;这两者的定义上跟 golang 很相似&#xff1b;其定长数组在创建好后不能设置超过数组长度的值&#xff0c;也就是不能push&#xff1b;而动态数组允许 push&#xff0c;还有一点很有意思的是&#x…

【Pix4d精品教程】垂直摄影空三加密生成DOM和DSM,并按10m间距提取高程点,生成等高线

在航测项目中,通常使用pix4d软件跑空三,生成数字正射影像DOM和数字表面模型DSM,当然还有点云数据。那么,在此基础之上,怎样根据航测要求,生成等间距5m或者10m的高程点和等高线呢,如上图所示?本文就来借助ArcGIS软件完成此波操作。 文章目录 一、Pix4d生成DOM和DSM二、A…

C语言试题七十三之请编写函数求两个数的最大公约数

📃个人主页:个人主页 🔥系列专栏:C语言试题200例目录 💬推荐一款刷算法、笔试、面经、拿大公司offer神器 👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 编写函数:…

介绍一款python类型检查工具pyright

介绍 近日&#xff0c;微软在 Github 上开源了一个 Python 静态类型检查工具&#xff1a;pyright &#xff0c;引起了社区内的多方关注。 微软在开源项目上的参与力度是越来越大了&#xff0c;不说收购 Github 这种大的战略野心&#xff0c;只说它家开源的 VS Code 编辑器&am…

python使用localhost链接mysql出错及解决办法

在命令行下运行如下&#xff1a; import MySQLdb connMySQLdb.connect(hostlocalhost,userroot,passwdxxxx,dbtest1) xxxx是实际的密码。 但是运行上面代码时出现错误&#xff1a; Cant connect to local MySQL server... 但是&#xff0c;如果把localhost修改为127.0.0.1即可&…

使用 POST 向 ASP.NET Core 传递数据时的长度限制与解决方案

使用 HTTP 协议上传文件的标准做法是&#xff1a;使用 multipart/form-data 。但有时为了实现简单且要上传的文件不会太大&#xff0c;仍然会采用 application/x-www-form-urlencoded 上传文件&#xff0c;这就需要在上传前对二进制文件进行编码&#xff0c;比如使用 Base64 。…

Eclipse利用Maven2搭建SpringMVC框架的Web工程

一、准备工作&#xff1a; 下载apache-maven--> 配置Maven_home -->下载Eclipse Maven插件 二、新建工程&#xff1a; 选择新建Maven Project archetype选择webapp-->输入group ID &#xff08;src下包名&#xff09;和Artifact ID (工程名) 新建Maven工程目录如上图…

【ArcGIS风暴】ArcGIS10.6获取栅格影像边界范围的三种方法案例详解

基于ArcGIS平台有多种办法可以提取栅格影像边界,常见的方法有3种: 栅格范围(Raster Domain)栅格转面(Raster to Polygon)创建轮廓(BuildFootprints)/构建边界(BuildBoundary)文章目录 1. 栅格范围(Raster Domain)2. 栅格转面(Raster to Polygon)3. 创建轮廓(Bui…