精华内容
下载资源
问答
  • 1.什么是静态成员 静态成员是类的所有对象共享的成员,而不是...静态数据成员在类中只有一个拷贝,不占用对象的存储空间,由该类的所有对象共同维护和使用 3.静态成员函数 如果某个方法为整个类所共有,不属于任何一...

    1.什么是静态成员
    静态成员是类的所有对象共享的成员,而不是某个对象的成员。
    静态成员分为静态数据成员静态成员函数
    2.静态数据成员
    如果某个属性为整个类所共有,不属于任何一个具体对象,则采用static关键字来声明为静态数据成员,例如:银行账户的利率
    静态数据成员在类中只有一个拷贝,不占用对象的存储空间,由该类的所有对象共同维护和使用
    3.静态成员函数
    如果某个方法为整个类所共有,不属于任何一个具体对象,则采用static关键字来声明为静态成员函数
    静态成员函数形参表中没有this指针形参,因此,静态成员函数内不能直接访问this指针

    4.使用方法:
    //student.h
    class Student
    {
    public: Student(); ~Student();
    Student(int pid,char * pname,float s);
    Student(const Student& init);
    void Display();
    static int Number( ); //静态成员函数的声明
    private: int id;
    char * name;
    float score;
    static int total; //静态数据成员的声明,代表班级学生总人数
    };
    //在类体外实现时不要加static关键字,否则错误 且其返回值必须是静态的
    //student.cpp
    int Student::Number()
    {//} //Right
    static int Student::Number()
    {//} //Error

    类内非静态成员函数可以直接访问非静态成员、静态成员;静态成员函数可以直接访问静态成员,通过对象访问非静态成员

    类外访问静态成员受成员访问权限的控制,可以有2种方法:
    (1)采用类外访问非静态成员的方法
    通过对象名、对象指针、对象引用访问公有静态成员
    for example: S1.Number( ) //S1为创建的对象

    (2)采用类名加作用域限定符的方法
    <类名>::<公有静态成员>
    for example: Student::Number( )
    且在类的实现前要进行静态成员的初始化和分配空间,即在cpp中定义类中成员函数前,需给静态成员分配空间和初始化

    静态成员与全局对象的区别
    1.静态成员的名字是在类的作用域中,因此可以避免与其他类的成员或全局对象名字冲突
    可以实施封装。
    2.静态成员可以是私有成员,而全局对象不可以
    3.通过阅读程序容易看出静态成员是与特定类关联的,可以清晰地显示程序员的意图

    展开全文
  • 当用实例化一个类的对象,编译器会根据类的定义来分配相应的存储空间 。也就是说,创建对象前,一定要有完整的类定义,这样编译器才能正确的计算所需空间。 那么我们来看如下代码:class dog{ dog tt; //...

    类声明:
    class dog; //类的声明

    类定义:
    class dog{ //类的定义

    };

    当用实例化一个类的对象时,编译器会根据类的定义来分配相应的存储空间
    。也就是说,在创建对象前,一定要有完整的类定义,这样编译器才能正确的计算所需空间。
    那么我们来看如下代码:

    class dog{
    dog tt; //error, ‘tt’ uses undefined class ‘dog’

    };

    上述代码中,由于dog还没有定义结束,在内部定义一个dog类型的对象时,编译器无法知道应该为tt分配多少内存空间,因此会报注释中的错误。

    我们再看下面一段代码:

    class dog{
    dog *Zhlu; //ok
    dog& SKII; //ok
    };

    在类定义时,定义指向自身类型的指针或引用作为内部成员没有问题,由于指针和引用所占存储空间大小与类型无关,所以编译器可以计算分配空间,所以正确。

    展开全文
  • 这个const一般是对中成员函数属性的声明,但这个声明怪怪的,只能放在函数声明的尾部,大概是因为其它地方都已经被占用了。...以下程序中,stack的成员函数GetCount仅用于计数,从逻辑上讲GetCount应当为co...

    这个const一般是对类中成员函数属性的声明,但这个声明怪怪的,只能放在函数声明的尾部,大概是因为其它地方都已经被占用了。这个声明表示任这个函数不会修改类中的数据成员。如果在编写const成员函数时,不慎修改了数据成员,或者调用了其它非const成员函数,编译器将指出错误,这无疑会提高程序的健壮性。
    以下程序中,类stack的成员函数GetCount仅用于计数,从逻辑上讲GetCount应当为const函数。编译器将指出GetCount函数中的错误。

    class Stack
    {
        public:
        void Push(int elem);
        int Pop(void);
        intGetCount(void) const; // const 成员函数
        private:
        int m_num;
        int m_data[100];
    };
    int Stack::GetCount(void)const
    {
        ++ m_num; // 编译错误,企图修改数据成员m_num
        Pop();// 编译错误,企图调用非const函数
        returnm_num;
    }
    

    关于Const函数的几点规则:
    a.在类中被const声明的成员函数只能访问const成员函数,而非const函数可以访问任意的成员函数,包括const成员函数…
    b.在类中被const声明的成员函数不可以修改对象的数据,不管对象是否具有const性质.它在编译时,以是否修改成员数据为依据,进行检查.

    一、概念

    当const在函数名前面的时候修饰的是函数返回值,在函数名后面表示是常成员函数,该函数不能修改对象内的任何成员,只能发生读操作,不能发生写操作。

    二、原理:

    我们都知道在调用成员函数的时候编译器会将对象自身的地址作为隐藏参数传递给函数,在const成员函数中,既不能改变this所指向的对象,也不能改变this所保存的地址,this的类型是一个指向const类型对象的const指针。

    参考链接

    展开全文
  • 这个const一般是对中成员函数属性的声明,但这个声明怪怪的,只能放在函数声明的尾部,大概是因为其它地方都已经被占用了。...以下程序中,stack的成员函数GetCount仅用于计数,从逻辑上讲GetCount应当为c...

    这个const一般是对类中成员函数属性的声明,但这个声明怪怪的,只能放在函数声明的尾部,大概是因为其它地方都已经被占用了。这个声明表示任这个函数不会修改类中的数据成员。如果在编写const成员函数时,不慎修改了数据成员,或者调用了其它非const成员函数,编译器将指出错误,这无疑会提高程序的健壮性。
    以下程序中,类stack的成员函数GetCount仅用于计数,从逻辑上讲GetCount应当为const函数。编译器将指出GetCount函数中的错误。
    class Stack
    {
    public:
    void Push(int elem);
    int Pop(void);
    intGetCount(void) const; // const 成员函数
    private:
    int m_num;
    int m_data[100];
    };
    int Stack::GetCount(void)const
    {
    ++ m_num; // 编译错误,企图修改数据成员m_num
    Pop();// 编译错误,企图调用非const函数
    returnm_num;
    }
    关于Const函数的几点规则:
    a.在类中被const声明的成员函数只能访问const成员函数,而非const函数可以访问任意的成员函数,包括const成员函数..
    b.在类中被const声明的成员函数不可以修改对象的数据,不管对象是否具有const性质.它在编译时,以是否修改成员数据为依据,进行检查.
    c加上mutable修饰符的数据成员,对于任何情况下通过任何手段都可修改,自然此时的const成员函数是可以修改它的

    展开全文
  • 有人说声明时候初始化相当于构造函数中初始化,其实不是成员变量初始化顺序为:先进行声明时初始化,然后进行初始化列表初始化,最后进行构造函数初始化,如下代码:(另外初始化列表中初始化顺序是和...
  • 1、如果一个重载操作符是类成员,那么只有当跟它一起被使用的左操作数是该类的对象,它才被调用。如果该操作符的左操作数必须是其他的类型,那么重载操作符必须是名字空间成员。 2、C++要求,赋值(=)、下标([ ])...
  • C++命名空间中声明类成员函数

    千次阅读 2018-06-24 15:47:22
    首先关于前置声明,有以下几点要注意:b.h头文件中引入a,有两种方式,前置声明和 #include “a.h”,建议使用前置声明,当a.h私有成员改变,b.h不需要重新编译。所以能用前置声明代替#include 时候,...
  • 新的概念:对象成员声明、初始化和访问 ...具体方法:定义"大对象"所在类的构造函数成员初始化列表中将参数传递到"小对象"成员的构造函数中。成员初始化列表的格式为 <对象成员1>(<初值表>
  • 然而,只要类名义出现就可以认为该类已经声明,因此,类的数据成员可以是指向自身类型的指针或引用”java中没有这么限制,先实验下: public class A {A a = new A();// A a;A(){System.out.println("create A");/
  • DEV C++类的成员函数声明,定义和实现 分为两种情况 1:类体内声明并定义成员函数 法1)新建项目–>Console Aplication–>项目名称 “项目管理”下,选择“添加文件夹”(也可以直接NEW FILE,添加文件夹...
  • 出现了一个问题,我ArrayList.h中定义了一个模板类ArrayList,然后按照原来的习惯,另一个源文件ArrayList.cpp中对模板类的成员函数进行定义,编译也通过了,但是当我main函数对模板类进行实例化,编译器...
  • 为了实现信息隐蔽(即封装后,用户只能看到函数的声明,知道如何去使用它,而不知道函数具体是如何实现的),对类的成员函数的定义一般不放在头文件中而放在另一个源代码文件中。下面我们以一个小例子来理解一下[cpp...
  • 总结: 1、const 数据成员不能在类内定义初始化,在类外初始化也不行。通常通过构造函数初始化。 ...2、static 数据成员不能在类...类的静态数据成员在 类内只能声明,定义和初始化必须在类外 为什么静态成
  • 调用静态类的成员(方法,变量,属性)的时候用 静态类名.成员名  的方式来调用   静态构造函数不可被直接调用,当创建类实例或引用任何静态成员之前,静态构造函数被自动执行,并且只执行一次。即:静态运行被...
  • C++为类中提供类成员的初始化列表类对象的构造顺序是这样的:1.分配内存,调用构造函数,隐式/显示的初始化各数据成员2.进入构造函数后在构造函数中执行一般... 4.static要在类的定义外面初始化。 5.数组成员是不...
  • 基于其字面提示,错误应该是成员函数应该是没有在类体中声明,而直接在类外定义造成。 由此可能出现下面情况: 在编写类函数实现出现1)情况 1)类内成员函数的声明语句或者该成员函数上一条语句没有...
  •  类的成员变量在定义初始化,那么每次创建这个类的对象,该成员变量的值都是固定为此值; 通过构造函数初始化,可以在创建该类对象动态赋值,更加灵活。 2.代码执行顺序 在类被创建,成员变量按照声明...
  • 类的成员变量 声明顺序 与 初始化顺序 相同 本文地址:http://blog.csdn.net/caroline_wendy/article/details/23845027 类成员的默认初始化顺序是按照声明顺序进行, 如果使用初始化列表初始化成员变量, 则必须...
  • c++中 数据成员的定义、声明总结

    千次阅读 2015-07-12 10:14:05
    C++为类中提供类成员的初始化列表 类对象的构造顺序是这样的: 1.分配内存,调用构造函数,隐式/显示的初始化各数据成员 2.进入构造函数后在构造函数中执行一般计算 ... 4.static要在类的定义外面初始化。
  • 在类声明时可以赋值元素

    千次阅读 2015-01-28 14:07:24
    C++中,声明的成员一般是不能赋值的,但是有一种情况是例外的,就是static const 类型。测试代码如下: //test.cpp文件 #include #include"a.h" using namespace std; class MyClass { public: static int ...
  • 1.‘’类‘’声明是一个对象大小与尺寸,定义时不分配内存。...3.在类里面声明static,不会开辟空间,而静态变量在声明时就需要开辟静态存储空间,所以如果不在类外部开辟空间,则会导致编译错误。 ...
  •  当一个类被多个程序使用,一般将类的声明(包含成员函数的声明)放在指定的头文件中,用户编程,只需将这个头文件包含进来,而不必每个使用该类的程序中重复书写其声明。而成员函数的定义则另一个源文件中...
  • 今天尝试自己实现vector数据结构底层,定义vector模板类的时候,还想像往常一样把类分为.h文件和.cpp文件,把成员函数的声明放在.h文件中,把具体实现放在.cpp文件中,结果测试发现编译过程中报错。...
  • 类的成员函数(简称类函数)是函数的一种,它的用法和作用和前面介绍过的函数基本上是一样的,它也有返回值和函数类型,它与一般函数的区别只是:它是属于一个类的成员,出现在类体中。它可以被指定为private(私有的...
  • 类的成员函数

    2020-05-18 21:12:52
    类的成员函数属于函数的一种,它也有函数名、返回值类型和参数表,用法和普通函数类似,只是它属于一个类的成员。c++中,成员函数既可以被定义为内联函数也可以定义成普通函数。 几个注意点 1.类外声明成员函数...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,887
精华内容 2,754
关键字:

在类的成员声明时