精华内容
下载资源
问答
  • 常数据成员格式
    千次阅读
    2017-08-11 15:09:18

    类的常数据成员必须进行初始化,而且只能通过构造函数的成员初始化列表的方式来进行。列表中对成员的初始化顺序,与它们在列表中的顺序无关,而与它们在类中的声明顺序有关。包含常数据成员的类不能使用默认构造函数。在对象被创建以后,其常数据成员的 值不允许被修改。


    类的常成员函数声明格式如下:

    函数类型       成员函数名(参数列表)    const;

    修饰符 const要加在函数说明的尾部,并且作为函数类型的一部分,不能省略,如果长成员函数定义在类体外,则不论是类内声明还是类外定义,都不能省略关键字const。


    说明:

    1、const是函数类型的一部分,在声明和定义是都要就加上const;

    2、const成员函数即可引用const数据,也可引用非const数据,但都不能改变值。

    3、const成员函数不能访问非const成员函数。

    4、非const成员函数可引用const数据,也可引用非cosnt数据,但不能改变const数据。

    5、作为函数类型的一部分,const可以参与区分重载函数

    更多相关内容
  • 静态数据成员和静态函数成员(因为类的成员本身就分为两类,属性和行为,也就是数据和函数) 二:静态数据成员: 一:类中定义 二:类外初始化为什么要这样类外初始化呢?代码解释: #include<iostream> ...

    目录

    一:静态成员:

    二:静态数据成员:

    三:静态数据成员的特点:

    四:访问静态数据成员

    五:静态函数成员,如何定义成员函数

    六:静态数据成员的特点、


    一:静态成员:


    在c++类中声明成员时, 加上static关键字声明的成员叫静态成员。
    跟平时声明成员时一样,只不过是在前面多加了一个static
    静态成员分为:

    静态数据成员静态函数成员(因为类的成员本身就分为两类,属性和行为,也就是数据和函数)


    二:静态数据成员:


    一:类中定义
    二:类外初始化

    为什么要这样类外初始化呢?
    代码解释:
     

    #include<iostream>
    using namespace std;
    
    class ClassName
    {
    public:
        ClassName();
        static int val;//现在类中声明一个静态数据成员val,只需要给在类型前面加上static就完事了
    };
    ClassName::ClassName()
    {
    
    }
    int main()
    {
        ClassName  obj;//创建对象
        obj.val = 0;
        cout << "obj.val=" << obj.val << endl;
        return 0;
    }


    但是如果这样写的话,编译器就会报错,找不到val,所以这样是错的

    正确的静态数据成员定义和初始化的代码格式如下:

    class ClassName
    {
    public:
        static Type date;//静态数据成员定义
    
    };
    Type ClassName::date = val;//静态数据成员类外初始化,可以这样理解:静态数据成员只能在类内定义,但是如果要进行初始化的时候
    //就必须这样在类外初始化,像这样用作用符把要初始化的数据成员,声明一下它是属于类的,用类名加以限定
    所以代码变成这样就实现了静态数据成员的定义和初始化以及输出
    #include<iostream>
    using namespace std;
    
    class ClassName
    {
    public:
        ClassName();
        static int val;//现在类中声明一个静态数据成员val,只需要给在类型前面加上static就完事了
    };
    int ClassName::val;//静态数据成员初始化
    ClassName::ClassName()
    {
    
    }
    int main()
    {
        ClassName  obj;//创建对象
        cout << "obj.val=" << obj.val << endl;//
        return 0;
    }
    这样就能很好的对静态数据成员定义和初始化了

    定义静态数据成员其实和静态变量一样。只不过在C++ 中是数据成员而已
    有区别的也就是
    静态数据成员必须要类内定义,类外初始化,而且只能初始化,不能赋值  int ClassName::val = 0
    ;


    三:静态数据成员的特点:


    一:所有对象都共享该数据成员,只有一份内存
    二:必须要在类外进行初始化

    首先只有一个,那么就不可能属于任何一个对象,因为如果属于了,那么别人就用不了了,比如说太阳,这里的太阳就可以指,静态数据成员,所有人都能照射到,所有对象都可以访问到,但是如果太阳被某人藏起来了,那么别人就照射不到,访问不到了,那样就麻烦了。
    所以静态数据成员应该是属于类的,类是对象的概括总结,也可以理解成是共享单车


    为什么只能是在类外初始化,类内定义,连饿构造函数都不行,那么有人就问了,构造函数难道不是用来赋初值的嘛,那是因为每次创建对象的
    时候都调用一次构造函数,那么调用一次,数据可能就会被修改一次,而静态数据成员是共享一份内存的,如果随意改变了,那么可能就会出现
    问题了

    为什么不能用对象去赋值初始化呢,因为静态数据成员说白了还是静态变量,既然是静态变量,那么就属于静态全局区,全局区的变量,随程序生,随程序死,那么对象的话,总有对象不是在静态全局区的,随程序生,随程序死的,那么由于生命周期的不同,所以就容易出现问题
    自然就不能这么使用了

    四:访问静态数据成员


    一:可以在类中重新赋值,可以被普通函数访问
    二:如果是公有属性,可以在类外被对象访问,或者通过类名访问(类名+作用符+数据成员名) 比如:ClassName::val;
    要注意的是:类名访问,肯定是从类外访问,那么类外访问的话,就要求静态数据成员是公有属性
    可以用类名访问这一点也说明:静态数据成员肯定不是属于对象的,如果是属于对象,那么又怎么能用类名去访问呢

    五:静态函数成员,如何定义成员函数


    一:直接在类中定义
    二:在类中声明,在类外定义
    代码举例:

    class ClassName
    {
    public:
        static Type fun(){}//在类中定义
        static Type fun2();//类中声明
    };
    Type ClassName::fun2(){}//在类外定义
    
    在类外定义的时候不需要再加上static 如:static void ClassName::test_fun1(),这样写是不对的,正确的类外定义应该是
    void ClassName::test_fun1()


    六:静态数据成员的特点、


    一:不属于对象,而是属于类的
    二:不能操作类中的普通成员和普通成员函数
    原因是因为普通数据成员是在类中声明的,但是这些普通的数据成员初始化是在创建对象的时候通过构造函数去初始化的,那么它的生命周期和静态的就不太一样,但反是static修饰的,就是生命周期比较长,随程序生随程序死,另外像这些静态函数由于是static修饰的,那么在你去访问这些东西的时候,你可以像以前一样通过类去点出来,如果是公有的话,但是还可以通过类名去访问:ClassName::test_fun1()
    那么这样的去调用的时候就会出现一个问题,我们以前的函数是通过对象去调用的,不管是点还是用指针指,总之都是用对象去调用的,那么必须要有一个调用函数的对象,那么就会存在一个this指针会指向调用函数的对象,但是在这里是直接通过类名+作用符去访问当前静态成员函数的,这个过程中不存在对象的事情,也就是说虽然调用了静态函数,不是用对象调的,如果存在this指针,那么this指针指向谁呢,没有对象去调用它,如果有this指针,它没地方指,所以我们在静态函数中写一个this是不对的,
    静态函数中是不存在this指针的,因为可以通过类名直接去访问函数,那么过程中间不存在对象,this指针就没得去指向了,为了避免这种情况的发生,索性就静态函数中就不要this指针了,如果通过对象去调用,虽然可以正确调到,但是this指针也没了
    另外由于对象和静态的生命周期不同,可能会导致,有静态没对象,this指针就没得指,另外,虽然静态不能调用数据成员,但是普通函数可以调用,那么怎样避免调用的普通函数中调用了数据成员的情况呢?索性就一刀切,既不要访问数据成员也不访问函数


     

    展开全文
  • 对象中的数据成员变量且必须要有初值。例如:Person const p('M')。一旦声明可对象那么对象中的所有数据成员的值都不能被修改。所以希望保证数据成员的不被改变的对象,我们都可将其声明为对象。 定义...
    1、常对象
    在定义对象是=时,我们可以将对象定义为 常对象。常对象中的数据成员为常变量且必须要有初值。例如:Person const p('M')。一旦声明可常对象那么常对象中的所有数据成员的值都不能被修改。所以希望保证数据成员的不被改变的对象,我们都可将其声明为常对象。
    定义常对象的格式:类名 const 对象名(实参列表){}   或const 类名 对象名(实参列表){}
    需要注意的是:一个对象一旦被声明为常对象,那么该对象就不能调用非const的成员函数(除了油系统自动调用的隐式的构造函数和析构函数)。
    总之一旦使用关键字const修饰成员函数,成员对象,一般情况下我们是不可以对数据成员进行修改,但是在是实际编程中我们确实要修改里面的值,比如我们声明了一个用于计数的变量count,这个值是需要不断变化的,这时我们只需将要修改的数据成员声明时在其前添加一个关键字:mutable即可:
    如mutable int count;这样声明其实是将count声明为可变的数据成员,这样我们就可以使用const的成员函数对其值进行修改。同时count也可以在构造函数中进行初始化。

    2、常数据成员声明
    常数据成员的声明与一般数据成员的=声明类似,而区别在在于在一般数据成员的声明前面加上以const关键字。常数据成员一旦声明并赋予初值,它的值是不能改变的。而且需要注意的是:常数据成员的智能通过构造函数的 参数 初始化列表对常数据成员进行初始化。
    格式:const 数据类型 变量名;
    下面的初始化是非法的在编译时是不会通过的:
    const char name;
    Person::Person(char n){name = b;}
    其编译不会通过的原因是:因为常数据成员是不能被赋值的。
    合法的初始化方式是:
    const char name;
    Person::Person(char n):name(n){}
    3、常数据函数
    常数据成员只能被常成员函数访问,但是常成员函数不能改变其值。
    声明常成员函数格式:数据类型 函数名 const{ }
    下面是声明常成员函数,并且使用常成员函数获取常数据成员:
    char  GetName() const{return name;}
    4、一个类中既有常数据成员又有非常数据成员
    当一个类中既有常数据成员又有非常数据成员时,不可在构造在构造函数中同时对二者进行初始化。这时对两个数据成员进行赋值时有所区别,因为常数据成员不能被赋值,所以在声明常数据成员之后对其初始化应在构造函数的参数初始化列表里进行,而非长数据成员可以通过定义函数改变其值。
    访问:在访问二者时,可以在常成员函数中访问也可以在非成员函数中访问;
    合法的访问:
    void getData()   //成员函数访问数据成员和常数据成员
    {cout<<"name"<<name<<endl;
      cout<<"age"<<age<<endl;
    }
    void getData()   const   //常成员函数访问常数据成员和数据成员
    {cout<<"name"<<name<<endl;
      cout<<"age"<<age<<endl;
    }
    赋值:不可以在常成员函数中对数据成员进行赋值;可以在成员函数中对数据成员赋值。
    非法的赋值方式:
    void getData() const
    {setAge(34);   //对age进行赋值
    }

    介绍了这么多,那什么时间使用常数据成员呢?
    1.在一个类中,如果一些数据成员需要改变,而有一些数据成员不需要改变,这时就可以把不需要改变的数据成员声明为常数据成员
         2.当一个类中的所有数据成员的值都不允许改变,这时C++机制中为我们提供两种方法:将所有的数据成员声明为常数据成员;另一种方法就是将对象声明为常对象。
         误区:不要误以为常对象中的成员函数都是常成员函数,常对象的使用是保证数据成员的值不被修改。当常对象的成员函数未声明为const时,编译系统默认它是非const成员函数。
    注意:常成员函数不能调用另一个非const成员函数。
    展开全文
  • Json数据格式

    千次阅读 2022-04-28 22:41:27
    Json(Javascript Object Notation)从Javascript派生而来,它是一种语言无关的数据格式,Json数据格式的文件以.json结尾。 Json数据格式由Douglas Crockford在2000年左右提出的。 RFC4627是描述了Json数据格式的...

    前言

    Json(Javascript Object Notation)从Javascript派生而来,它是一种语言无关的数据格式,Json数据格式的文件以.json结尾。

    Json数据格式由Douglas Crockford在2000年左右提出的。

    RFC4627是描述了Json数据格式的第一份informational状态的RFC文档。2013年,ECMA-404标准化了Json;2017年,RFC8259正式成为Standard状态的RFC文档,标志着Json数据格式正式成为一种标准。另外,ECMA-404与RFC8259始终保持一致。

    基本内容

    Json是一种用字符来表示数据的数据格式,它的本质就是一个字符串,只不过它用了一些特殊的字符标记来表示不同的类型的数据。

    Json中,一切皆字符。

    数据格式

    结构化标记:

    [ ]:方括号用于表示数据类型。

    {}:大括号用于表示对象类型。

    ::冒号用于分隔name/value对。

    ,:逗号用于分隔value。

    在结构化标记前后允许存在空白:

    4种空白:

    Space(空格),水平Tab,LF(Line Feed),回车(CR)。

    允许的值

    4数据类型:

    object,array,number,string。

    以及3中字面值(常量):

    true,false,null。

    number

    number = [ minus ] int [ frac ] [ exp ]
    decimal-point = %x2E ; .
    digit1-9 = %x31-39 ; 1-9
    e = %x65 / %x45 ; e E
    exp = e [ minus / plus ] 1*DIGIT

    frac = decimal-point 1*DIGIT

    int = zero / ( digit1-9 *DIGIT )
    minus = %x2D ; -
    plus = %x2B ; +
    zero = %x30 ; 0
    上面是number的格式,其既能表示整数,又能表示小数形式浮点数,还能表示指数形式的浮点数,
    例子:
    3
    -2
    0
    -3.14
    3.14
    0.08 
    -0.76 
    2.141e5 
    2.14E10 
    3.68e-5 
    -9.111e10

    string

    stirng="中间是字符串"

    string采用双引号包围,中间是字符串内容。

    注意点:

    1、必须采用转义表示的符号

    "   引号

    \   反斜杠

    U+0000-U+001F  控制字符

    2、任何字符都可以采用\uxxxx这种形式来表示

    对于BMP平面(U+0000 -- U+FFFF)的Unicode字符,直接使用\u xxxx(一共6个字符)的形式,例如\(反斜杠)可以使用\u005c的形式。

    对于扩展平面(U+10000 — U+10FFFF)的Unicode字符,如果要采用转义形式,必须使用UTF-16的编码形式,然后采用\uxxxx\uxxxx(一共12个字符)的形式,例如 𠀅 U+20005这个中文,UTF-16编码为0xD840 0xDC05,那么就可以采用\uD840\uDC05的形式。

    记住:第2点的要求是可以,不是必须。

    3、一些允许的转义形式

    "                   quotation mark U+0022
    \                   reverse solidus U+005C
    /                   solidus U+002F
    b                  backspace U+0008
    f                   form feed U+000C
    n                  line feed U+000A
    r                   carriage return U+000D
    t                   tab U+0009
    uXXXX        U+XXXX

    object

    object={ 0个或多个name/value对 }

    object采用大括号包围,内部包含0个或多个name/value对。name必须是Json的string,后面跟上一个冒号,冒号后面是值,值可以任意4中数据类型以及3种字面值。也就是说,object可以嵌套object。name/value之间通过逗号隔开。

    示例:

    {
     "Image": {
     "Width": 800,
     "Height": 600,
     "Title": "View from 15th Floor",
     "Thumbnail": {
     "Url": "http://www.example.com/image/481989943",
     "Height": 125,
     "Width": 100
     },
     "Animated" : false,
     "IDs": [116, 943, 234, 38793]
     }
     }

    array

    array=[0个或多个成员]

    数组成员可以是Json中的4种数据类型,以及3中字面值。也就说,array可以嵌套array。成员之间采用逗号隔开。

    示例:

    [
     {
     "precision": "zip",
     "Latitude": 37.7668,
     "Longitude": -122.3959,
     "Address": "",
     "City": "SAN FRANCISCO",
     "State": "CA",
     "Zip": "94107",
     "Country": "US"
     },
     {
     "precision": "zip",
     "Latitude": 37.371991,
     "Longitude": -122.026020,
     "Address": "",
     "City": "SUNNYVALE",
     "State": "CA",
     "Zip": "94085",
     "Country": "US"
     }
     ]

    以上内容参考RFC8259。

    一些其他Json数据示例(不包括object与array):

    "Hello world!"
     42
     true

    注意点

    1、RFC8259要求JSON TEXT的传输编码必须为UTF-8。

    2、Implemention要注意校验\uxxxx是否为合法的UTF16序列,例如\uDEAD就是一个可能的非法序列,它不表示任何Unicode字符。

    3、不要直接比较JSON TEXT,因为结果不确定。例如,JSON TEXT的a\\b和a\u005cb表示的是同样的内容,如果直接比较JSON TEXT,结果会是FALSE,这显然是一个错误的结果。所以,如果要比较JSON TEXT中的内容是否相等,应该先反序列化,然后再进行比较。

    展开全文
  • 1.引用 用const声明的引用就是引用。引用所引用的对象不能被更改。经常见到的是引用作为函数的形参,这样不会发生对实参的误修改。引用的声明形式为:const 类型说明符 &引用名。引用作为函数形参...
  • 静态成员函数访问非静态数据成员【C++】

    千次阅读 多人点赞 2021-05-11 10:33:56
    静态成员函数访问非静态数据成员静态数据成员静态成员函数 静态数据成员 定义格式: static 类型名 静态数据成员名 ; 详解:由于静态数据成员属于本类的所有对象共享,不属于特定类对象,因此在未产生类对象时作用...
  • 数据成员:静态数据成员是类的一部分,为类的所有实例共享(静态区); 非静态数据成员,类的每个实例都有一份拷贝(动态区)。静态数据成员的访问:静态数据成员是类的一部分,在产生任何实例之前已经存在,通过 类名...
  • **************************数据成员的初始化 *******************************************************************************************************************1、数据成员是否能在定义类的时候就初始化?...
  • c++之静态数据成员与静态成员函数

    千次阅读 2020-05-11 09:28:20
    什么是静态数据成员数据成员我们之前学过,是对象的属性。 同一个类,不同的对象,可能拥有不同的属性 例如一个车行,不同的车有不同的颜色,不同的耗油量。。。等等属性 但是当我们统计一个公有的数据,用数据...
  • 一、 PCL中点云数据类型 ...成员变量: float x, y, z; 最常见的一个点数据类型,因为它只包含三维xyz坐标信息, 值得注意的是它多加了一个浮点数来满足内存对齐 //访问xyz方式一 float x = cl..
  • 题目要求: 商店销售某一商品,商店每天公布统一的折扣(discount)。同时允许销售人员在销售时灵活掌握售价(price),在此基础上,对一次购 10 件以上者,还可以享受 9.8 折...要求用静态数据成员和静态成员函数。...
  • 网上总结的C++静态成员数据,我自己又重新总结了一下 一、结合实例进行说明 1. 静态成员数据变量的定义及应用 1)要在成员数据的定义之前加关键字static 2)静态成员数据必须有确定的值,但由于在类的定义中不...
  • 常用的数据格式汇总

    万次阅读 2018-05-16 19:59:02
    1、libsvm数据格式libsvm使用的训练数据和检验数据文件格式如下: [label] [index1]:[value1] [index2]:[value2] … [label] [index1]:[value1] [index2]:[value2] …label 目标值,就是说class(属于哪一类),...
  • C++ --- 静态数据成员

    千次阅读 2018-07-31 23:35:09
    静态数据成员 多个同类的对象之间实现数据共享,但是不用全局变量,可以用静态数据结构成员。因为全局变量的值可以在各处随意的修改,很可能因为一处失误,导致整个程序失败。 #include &lt;iostream&gt;...
  • c++的静态数据成员初始化方法

    千次阅读 2020-03-18 14:51:35
    类的静态成员变量初始化应该在类外进行 注意,不能在头文件初始化,只能在cpp文件中初始化,如果在声明中初始化, 在其它地方引用时相当于多...静态数据成员初始化的格式如下:  <数据类型><类名>::&l...
  • 类的静态成员函数和静态数据成员

    千次阅读 2015-10-10 21:31:27
    一、基本知识当将类的某个数据成员声明为static时,该静态数据成员只能被定义一次,而且要被同类的所有对象共享。各个对象都拥有类中每一个普通数据成员的副本,但静态数据成员只有一个实例存在,与定义了多少类对象...
  • 一个类的对象作为另一个类的数据成员。 &nbsp; &nbsp; &nbsp; &nbsp;一个类中的数据成员除了可以是int, char, float等这些基本的数据类型外,还可以是某一个类的一个对象。用子对象创建新类。 &...
  • 定义一个学生类,包含学号、姓名、平时成绩和考核成绩四个数据成员和以下成员方法(用Python语言):Python实验题目:类与文件实验要求:1.定义类2.定义并使用类对象3.打开和存取文件...定义一个学生类,包含学号、...
  • #include <string> #include<iostream> using namespace std; class Date{ private: int year; int month; int day; public: Date(int a,int b,int c) { year=a; month=b;...year...
  • OSG文件数据格式

    千次阅读 2019-04-02 10:35:02
    OSG场景数据格式,可以记录场景书结构的所有节点及其属性信息。 它属于文本文件类型,不需要专门的编辑器。 使用OSG自带的osgViewer.exe可以快速的浏览osg文件的内容;使用osgconv可以使文件在osg和其他数据格式中...
  • 数据格式

    千次阅读 2017-04-09 13:45:31
    一、矢量数据格式 矢量数据(Vector Data)是用X、Y、Z坐标表示地图图形或地理实体位置的数据。 矢量数据一般通过记录坐标的方式来尽可能将地理实体的空间位置表现的准确无误。 常见的矢量数据有:点、线、面等格式...
  • 不允许 dllimport 静态数据成员

    万次阅读 2014-10-07 17:28:52
    不允许 dllimport 静态数据成员 View Code 当要使用一个类的时候必须要有其定义,有2种方式: 1、引用其头文件,即#include "xxx.h"。这是传统的方式。 2、使用导出类。 什么是‘导出类’,很...
  • TIFF格式概述,什么是TIFF格式,TIFF的文件如何读写? TIFF(Tagged Image File Format):标记文件格式,是一种灵活的位图格式
  • 定义一个日期类Date,包括年、月、日等私有数据成员。要求为所定义的Date类设计如下重载运算符函数: Date operator+(int days);//返回一个日期加天数days后得到的日期 Date operator-(int days);//返回一个...
  • 这里指向数据成员的指针和指向成员函数的指针与指向变量的指针和指向函数的指针进行对比来解释,比较好理解一些。指向变量的指针和指向函数的指针先举个例子:void func(int a, int b){ cout ; }int main() { int ...
  • 1、在c++中,当把一个类的对象作为另一个新类的数据成员时,定义格式为: class X     {  类名1 成员名1;      类名2 成员名2;  其他成员;     } 2、如果一个类A的对象作为另一个类B的...
  • static数据成员与static成员函数

    千次阅读 2013-05-13 11:51:45
    定义:用static关键字声明的数据成员称为静态数据成员。 每个类只有一个存储单元,静态数据成员为该类的所有对象共有,不属于某个对象。静态数据成员的初始化必须在类以外进行定义性说明。 形式为:类型> 类名>:...
  • 2. 介绍了Hive 常见的存储格式,Parquet 和 ORC都是二进制存储的,都是不可直接读取的,Parquet和ORC 都是Apache 顶级项目,Parquet不支持ACID 不支持更新,ORC支持有限的ACID 和 更新 3. 我们简单对比了一下Text、...
  • 1、引用AVCodecContext中对该数据成员的解释 /** * some codecs need / can use extradata like Huffman tables. * MJPEG: Huffman tables * rv10: additional flags * MPEG-4: global headers (they can be
  • C++指向类成员(数据、函数)的指针

    千次阅读 2017-08-20 18:37:20
    指向【类】的成员的指针包含两种: ★指向【类】的数据成员的指针 ★指向【类】的成员函数的指针 ...1、指向类的数据成员的指针1.1 定义+初始化的格式: 数据类型 类型:: *指针名 = &类型:: 非静态公有数据

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 429,643
精华内容 171,857
热门标签
关键字:

常数据成员格式