精华内容
下载资源
问答
  • 1.定义静态数据成员后要对静态数据成员进行初始化静态数据成员初始化: <数据类型><类名>::静态数据成员 = <值> 2.静态数据成员往往数私有的,静态数据成员不能直接访问,要通过定义为公有...

    1.定义静态数据成员后要对静态数据成员进行初始化!
    静态数据成员的初始化:
    <数据类型><类名>::静态数据成员 = <值>

    2.静态数据成员往往数私有的,静态数据成员不能直接访问,要通过定义为公有的静态函数成员来访问静态数据成员。

    3.静态函数成员接口实现时在前面不加 static 前缀。

    4.静态函数成员,不能直接访问非静态数据成员,除非通过对象名来访问该对象的非静态数据成员。

    部分代码描述:
    定义货物类,私有成员有货物重量,货物总重量(静态数据成员),初始化静态数据成员。
    static int gettotalweight();不能直接访问 weight

    #include <iostream>
    using namespace std;
    
    class Tgoods{
    private:
    	int weight;
    	static int totalweight;
    public:
    	Tgoods(int w);
    	~Tgoods();
    	int getweight();
    	static int gettotalweight();
    };
    
    //△<数据类型><类名>::<静态数据成员名>=<值>
    int Tgoods::totalweight = 0;
    
    Tgoods::Tgoods(int w){
    	weight = w;
    	totalweight += weight; 
    }
    
    Tgoods::~Tgoods(){
    	totalweight -= weight;
    }
    
    Tgoods::getweight(){
    	return weight;
    }
    
    int Tgoods::gettotalweight(){
    	return totalweight;
    }
    
    int main()
    {
    	Tgoods goods1(20), goods2(30);
    
    	cout<< Tgoods::gettotalweight() <<endl;
    
    	//getchar();
    	
    	return 0;
    }
    
    
    
    展开全文
  • 静态函数成员与普通函数成员一样,在ELF 文件中都只会保留一份copy,它们的区别体现在:静态成员函数可以在不定义对象的情况下直接调用,而非静态成员函数不行。 class X { public: void f1(){

    静态数据成员与静态函数成员都是同一个类的所有对象共享的成员。

    补充以下两个个知识点:

    静态数据成员的初始化:静态数据成员的初始化必须在类定义外进行。

    静态函数成员的作用:

    静态函数成员与普通函数成员一样,在ELF 文件中都只会保留一份copy,它们的区别体现在:静态成员函数可以在不定义对象的情况下直接调用,而非静态成员函数不行。

    class X
    {
    public:
    	void f1(){ cout << "f1" << endl; }
    	static void f2(){ cout << "f2" << endl; }
    };
    
    int main()
    {
    	X::f1();   //报错
    	X::f2();  //正常运行
    }


    展开全文
  • 静态成员初始化

    千次阅读 2018-08-21 15:16:33
    一般都是类内声明,类外初始化,因为静态成员属于整个类,而不属于某个对象,如果在类内初始化,会导致每个对象都包含该静态成员,这是矛盾的 不过,静态常量成员是可以在类内声明的 class Student { priva...

    类外初始化

    class Student {
        private:
            static int age;
    }
    
    int Student::age=20;

    一般都是类内声明,类外初始化,因为静态成员属于整个类,而不属于某个对象,如果在类内初始化,会导致每个对象都包含该静态成员,这是矛盾的

    不过,静态常量成员是可以在类内声明的

    class Student {
        private:
            static int age=20;//错误,静态成员不能在类内初始化
            const int age=20;//错误,常量成员也不能在类内初始化
            static const int age=20;//正确
    }

    这里写图片描述

    三种必须用初始化列表初始化的

    1. 非静态常量
    2. 引用类型
    3. 没有默认构造函数的类类型
    展开全文
  • 在C++中,类的静态成员(static member)必须在类内声明,在类外初始化,像下面这样 class A { private: static int count ; // 类内声明 }; int A::count = 0 ; // 类外初始化,不必再加static关键字 为什么?...

    在C++中,类的静态成员(static member)必须在类内声明,在类外初始化,像下面这样

    class A
    { private: static int count ; // 类内声明 }; int A::count = 0 ; // 类外初始化,不必再加static关键字 

    为什么?


    因为静态成员属于整个类,而不属于某个对象,如果在类内初始化,会导致每个对象都包含该静态成员,这是矛盾的。

    什么东西能在类内初始化

    能在类中初始化的成员只有一种,那就是静态常量成员。

    这样不行

    class A
    { private: static int count = 0; // 静态成员不能在类内初始化 };
    

    这样也不行

    class A
    { private: const int count = 0; // 常量成员也不能在类内初始化 };

    但是这样可以

    class A
    { private: static const int count = 0; // 静态常量成员可以在类内初始化 };
    

     

    结论:

    • 静态常量数据成员可以在类内初始化(即类内声明的同时初始化),也可以在类外,即类的实现文件中初始化,不能在构造函数中初始化,也不能在构造函数的初始化列表中初始化;
    • 静态非常量数据成员只能在类外,即类的实现文件中初始化,也不能在构造函数中初始化,不能在构造函数的初始化列表中初始化;
    • 非静态的常量数据成员不能在类内初始化,也不能在构造函数中初始化,而只能且必须在构造函数的初始化列表中初始化;
    • 非静态的非常量数据成员不能在类内初始化,可以在构造函数中初始化,也可以在构造函数的初始化列表中初始化;

     

    总结如下表:

    类型 初始化方式

    类内(声明)

    类外(类实现文件)

    构造函数中

    构造函数的初始化列表

    非静态非常量数据成员

    N

    N

    Y

    Y

    非静态常量数据成员

    N

    N

    N

    Y (must)

    静态非常量数据成员

    N

    Y (must)

    N

    N

    静态常量数据成员

    Y

    Y

    N

    N

     

     以下三种类型必须通过初始化列表来初始化
    1.非静态 常量


    2. 引用类型


    3. 没有默认构造函数的类类型

    展开全文
  • 记住:通常静态数据成员在类声明中声明,在包含类方法的文件中初始化.初始化时使用作用域操作符来指出静态成员所属的类....}一般地静态数据成员在该类定义之外被初始化如同一个成员函数被定义在类定义之
  • 也不能在类的构造函数初始化该成员,因为静态数据成员为类的各个对象共享,否则每次创建一个类的对象则静态数据成员都要被重新初始化静态成员不可在类体内进行赋值,因为它是被所有该类的对象所
  • C++静态成员变量的初始化

    万次阅读 多人点赞 2014-03-03 16:53:37
    需要注意的是:静态数据成员不能在类中初始化,一般在类外和main()函数之前初始化...2.静态成员不能在类定义里边初始化,只能在class body外初始化。 3.静态成员仍然遵循public,private,protected访问准则。 4.静
  • 静态成员变量: 类体中的数据成员的声明前加上static关键字,该数据成员就成为了该类的静态数据成员。和其他数据成员一样,静态数据成员也遵守public/protected/private访问规则。同时,静态数据成员还具有以下特点...
  • c++中的静态成员变量如何初始化

    千次阅读 2018-04-07 14:01:10
    class A   { static int a ; }   在A.cpp文件中这样初始化才可以 int A:: a = 3;
  • 1.只能在构造函数初始化列表初始化的成员变量的类型?  a.const成员变量  b.引用类型的成员变量  c.static不能在初始化列表中进行初始化  d.类成员变量中有自定义类型的变量最好在初始化列表中进行初始化 2.初始...
  • 2、C++中,const成员变量也不能在类定义处初始化,只能通过构造函数初始化列表进行,并且必须有构造函数。 【const数据成员只在某个对象生存期内是常量,而对于整个类而言却是可变的。因为类可以创建多个对象,...
  • .Net提供了成员初始化语句和静态构造函数初始化静态成员。  根据上一个单元,我们可以知道静态成员初始化语句会早于静态构造函数执行,其次还知道成员初始化语句的好处和一些限制。这里要提的一点就是,静态...
  • 类的静态成员变量初始化时间

    千次阅读 2020-05-02 14:28:37
    首先先搞明白 声明、定义、初始化 ...类静态成员变量在main函数执行前完成初始化,有静态初始化和动态初始化 static initialization: 静态初始化指的是用常量来对变量进行初始化,主要包括 zero initialization 和...
  • 类的静态成员变量初始化问题

    千次阅读 2019-08-12 20:24:37
    我们都知道类的静态成员变量必须在类外初始化,不仅如此,类的静态成员变量最好在源文件中初始化,而不能在头文件初始化,否则,编译的时候就会报错"symbol multiply defined". 举例: /*--testA.h--*/ class A ...
  • C++静态成员函数 与数据成员类似,成员函数也可以定义为静态的,在类中声明函数的前面加static就成了静态成员函数。如 static int volume( ); 和静态数据成员一样,静态成员函数是类的一部分,而不是对象的一...
  • 用static修饰的 成员函数,称之为静态成员函数。静态的成员变量一定要在类外进行初始化。 看代码的注释 面试题:实现一个类,计算中程序中出创建出多少个类对象。 class A { public: A() { ++_scount; ...
  • 引子:我们知道,在调用构造函数时,构造函数会自动初始化其非静态成员,如: class NotStaticMember { public: NotStaticMember(){ cout << "NotStaticMember() is called" << endl; } ~...
  • 静态数据成员和静态成员函数

    万次阅读 多人点赞 2018-08-26 19:18:35
    c++中的static静态数据成员和静态成员函数应该是让大家比较头疼的东西,好像也是找工作公司面试中常常问到的东西。我自己也深有体会,在学习c++的过程中,总感觉static很烦人,但是又是一个必须懂的东西,所以今天就...
  • 昨天在修改项目函数功能时,在其中一个类中添加了一个静态成员变量和两个静态成员函数,结果在链接时出现一个非常典型的错误:“The follwing symbols referenced in processor “p0” could not be resolved:Class:...
  • C++静态成员变量初始化和赋值

    万次阅读 2019-03-07 14:29:57
    静态成员函数没有this指针,它不能返回非静态成员,因为除了对象会调用它外,类本身也可以调用 。 C++静态成员变量: 必须在外部定义和赋值; 不能在 main() 函数中定义 不能在类的构造函数中定义 ...
  • Java的初始化块、静态初始化块、构造函数的执行顺序及用途探究 - BlackStorm - 博客园 https://www.cnblogs.com/BlackStorm/p/5699965.html Java的初始化块、静态初始化块、构造函数的执行顺序及用途探究  ...
  • 静态成员函数与非静态成员函数的区别

    千次阅读 多人点赞 2017-05-02 22:14:59
    介绍C++中静态成员函数与费静态成员函数的区别。
  • 用静态构造函数初始化静态成员

    千次阅读 2011-03-21 14:11:00
    静态成员初始化语句会早于静态构造函数执行,其次静态构造函数是由CLR调用执行的,所以静态构造函数只能是一个,同时不能还有参数 。那么静态构造函数相对于成员初始化的一些弊端都不复存在。 对于静态成员何时...
  • Java中非静态成员变量、静态成员变量的初始化时机。 非静态变量 我们在这里分析三种结构,着重分析这三种结构的初始化顺序: 成员变量初始化语句; 成员变量初始化块; 构造函数; 示例一: public class ...
  • 数据成员静态数据成员是类的一...静态函数成员与非静态函数成员都为类所有,对象中并不存在函数的拷贝(每个对象所占用的存储空间只是该对象的数据成员所占用的存储空间,但是在逻辑上函数和数据是一起被封装进...
  • 1.通过类名调用静态成员函数和非静态成员函数 2.通过类的对象调用静态成员函数和非静态成员函数 3.在类的静态成员函数中使用类的非静态成员 4.在类的非静态成员函数中使用类的静态成员 5.使用类的静态成员变量 ...
  • Java类中静态成员初始化

    千次阅读 2018-03-20 10:21:55
    Specifying initial values in a class definition./* * 2018年3月20日10:09:27 * 代码位置: java编程思想 P95 * * 代码片目的,为了说明: * 无论创建多少个对象,静态数据都只占用一份存储区域。...
  • 1.静态成员变量和静态成员函数诞生顺序,以及为什么诞生(使用场景)? 2.有无this指针? 3.和类以及对象的关系? 4.如何定义以及访问的方式与普通成员变量和普通成员函数的区别? 5.是怎么分配内存的? 当调用一个...
  • 关于静态成员函数

    千次阅读 多人点赞 2017-09-19 14:02:55
    关于静态成员函数 静态成员是受到private限定符的作用的,若用private修改,不可外部访问的  static对象如果出现在类中,那么该对象即使从未被使用到,它也会被构造以及析构。而函数中的static对象,如果该函数...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 227,434
精华内容 90,973
关键字:

静态成员函数初始化