c c++编程-c++关于静态数据成员的问题,看以下程序,会输出什么数字,过程是什么

问题描述

c++关于静态数据成员的问题,看以下程序,会输出什么数字,过程是什么

解决方案

打印出221

 Obj obj1; //会调用构造,所以i++了(变为1了)
    f();        //调用函数f(),在函数内定义了一个对象,也会调用构造,i++了(变为2了),打印出第一个数字2,
               //打印完以后,f()函数结束了,obj2离开了作用域,调用析构i--了(变为1了)
    Obj *obj3 = new Obj;//会调用构造,所以i++了(变为2了)
    cout << obj3->getVal();//打印出2
    delete obj3;//调用析构,i--(变为1了)
    cout << Obj::getVal();//打印出1

注:
静态数据成员是所有对象所公有的,因此,对多个对象来说,静态数据成员只存储一处,供所有对象共用。静态数据成员的值对每个对象都是一样,但它的值是可以更新的。只要对静态数据成员的值更新一次,保证所有对象存取更新后的相同的值,这样可以提高时间效率。

解决方案二:

getVal是静态方法,函数f只是调用了这个方法,并没有初始化对象,所以 返回0,后面new,会执行 i++,然后delete会执行析构函数,i--

时间: 2024-11-03 14:19:51

c c++编程-c++关于静态数据成员的问题,看以下程序,会输出什么数字,过程是什么的相关文章

C++类静态数据成员与类静态成员函数

在没有讲述本章内容之前如果我们想要在一个范围内共享某一个数据,那么我们会设立全局对象,但面向对象的程序是由对象构成的,我们如何才能在类范围内共享数据呢? 这个问题便是本章的重点: 声明为static的类成员或者成员函数便能在类的范围内共同享,我们把这样的成员称做静态成员和静态成员函数. 下面我们用几个实例来说明这个问题,类的成员需要保护,通常情况下为了不违背类的封装特性,我们是把类成员设置为protected(保护状态)的,但是我们为了简化代码,使要说明的问题更为直观,更容易理解,我们在此处都设

mfc-MFC 静态数据成员初始化

问题描述 MFC 静态数据成员初始化 要用到AfxBeginThread(threadproc,.....),函数threadproc()必须为静态函数,我使用这个函数需要调用 如下静态成员 但是我只能在 .cpp文件外部初始化为空.请问应该在哪给他们赋上后面的值,还是我的思路有问题. pStc=(CStatic *)GetDlgItem(IDC_STATIC); pStc->GetClientRect(&rect): pDC=pStc->GetDC(); hDC=pDC->Ge

C++类中的常数据成员与静态数据成员之间的区别_C 语言

刚开始学习C++的类和对象的部分,对类中的常数据成员和静态数据成员的概念和用法经常混淆,所以今天整理一下,顺便说一下,今天是我的生日,祝我生日快乐,呵呵. 常数据成员常数据成员是指在类中定义的不能修改其值的一些数据成员,类似于我们以前学过的常变量,虽然是变量,也有自己的地址,但是一经赋初值,便不能再被修改. 适用于类中定义一些初始化之后不希望被修改的变量. 定义方法: 复制代码 代码如下: const 类型名 变量名; (1)类中的常数据成员只能通过构造函数的参数初始化表进行初始化. (2)常数

c# static 静态数据成员_实用技巧

① 静态成员属于类所有,非静态成员属于类的实例所有. ② 每创建一个类的实例,都市在内存中为非静(动)态成员新分派一块存储: 静态成员属于类所有,为各个类的实例所公用,无论类创建了几多实例,类的静态成员在内存中只占同一块区域. 静态数据成员区别于动态数据成员,静态变量并不是稳定的,只是静态变量在声明的时候不管有没有赋值,都市凭据它的类型分派对应的内存空间,他的可访问性和作用区间与动态变量是一样的 ==================================================

C++静态数据成员实现

静态数据成员是在一个类中用关键字static声明的数据成员.在C++中,一般使用静态成员来代替C语言的全局变量,以达到数据共享.C和C++的全局变量有一定的局限性,可以任意被修改,也容易和其它的变量名冲突,故在C++中,一般不使用全局变量. 静态数据成员必须进行初始化,初始化应在类体外进行,静态数据成员也可以引用,但不能引用私有数据部分. 接下来看一个例子: #include <iostream> #include <cstring> using namespace std ; c

c#匿名方法的静态数据成员和实例数据成员用法

匿名方法总是以一个delegate关键字开始,后面跟着用在方法和方法体(the method body)本身中的参数.正如从上面示例中所见,用户不需要确定匿名方法的返回类型.它(译注:指返回类型)由方法体中的return语句推断而来..NET CLR不能执行像匿名方法一样的自由流(free flowing)代码块.CLR要求:它执行的每个方法是一个类型的一部分,并且应该是一个静态(static)方法或实例(instance)方法(译注:若一个方法声明中含有 static 修饰符,则称该方法为静态

详解C++编程中的静态成员与可变数据成员_C 语言

静态成员类可以包含静态成员数据和成员函数.当数据成员被声明为"静态"时,只会为类的所有对象保留一个数据副本. 静态数据成员不是给定的类类型的对象的一部分.因此,静态数据成员的声明不被视为一个定义.在类范围中声明数据成员,但在文件范围内执行定义.这些静态类成员具有外部链接.下面的示例阐释了这一点: // static_data_members.cpp class BufferedOutput { public: // Return number of bytes written by a

C++ 类,如何用类似字符串的东西定义一个数据成员?

问题描述 C++ 类,如何用类似字符串的东西定义一个数据成员? 题目:设计一个书类,能够保存书名.定价,所有书的本数和总价. 为了实现这一要求,可以将书名.定价设计为普通数据成员,将书的本数和总价设计为静态数据成员.(如何实现题目中的书名?) 如: class book{ public: book()//构造函数,怎样定义一个名字 void show()://cout名字 private: //怎样定义一个名字 } void main{ book a();//对象a,输入一个名字: } 求各位赐

C#并行编程-PLINQ:声明式数据并行

原文:C#并行编程-PLINQ:声明式数据并行 背景 通过LINQ可以方便的查询并处理不同的数据源,使用Parallel LINQ (PLINQ)来充分获得并行化所带来的优势. PLINQ不仅实现了完整的LINQ操作符,而且还添加了一些用于执行并行的操作符,与对应的LINQ相比,通过PLINQ可以获得明显的加速,但是具体的加速效果还要取决于具体的场景,不过在并行化的情况下一段会加速. 如果一个查询涉及到大量的计算和内存密集型操作,而且顺序并不重要,那么加速会非常明显,然而,如果顺序很重要,那么加