精华内容
下载资源
问答
  • c++静态方法和静态成员

    千次阅读 2019-05-23 20:43:33
    c++静态方法和静态成员 便于实现同一类的不同对象之间数据共享 静态成员的提出是为了解决数据共享的问题。实现共享有许多方法,如:设置全局性的变量或对象是一种方法。但是,全局变量或对象是有局限性的。这一章里...

    c++静态方法和静态成员

    便于实现同一类的不同对象之间数据共享

    静态成员的提出是为了解决数据共享的问题。实现共享有许多方法,如:设置全局性的变量或对象是一种方法。但是,全局变量或对象是有局限性的。这一章里,我们主要讲述类的静态成员来实现数据的共享。

    静态数据成员

    在类中,静态成员可以实现多个对象之间的数据共享,并且使用静态数据成员还不会破坏隐藏的原则,即保证了安全性。因此,静态成员是类的所有对象中共享的成员,而不是某个对象的成员。

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

    静态数据成员的使用方法和注意事项如下:

    1、静态数据成员在定义或说明时前面加关键字static。//静态变量的定义

    2、静态成员初始化与一般数据成员初始化不同。静态数据成员初始化的格式如下:

    <数据类型><类名>::<静态数据成员名>=<值> //静态变量的初始化

    这表明:

    • (1) 初始化在类体外进行,而前面不加static,(这点需要注意)以免与一般静态变量或对象相混淆。

    • (2) 初始化时不加该成员的访问权限控制符private,public等。

    • (3) 初始化时使用作用域运算符来标明它所属类,因此,静态数据成员是类的成员,而不是对象的成员。

    3、静态数据成员是静态存储的,它是静态生存期,必须对它进行初始化。

    4、引用静态数据成员时,采用如下格式:

    <类名>::<静态成员名> //静态变量的使用方式

    如果静态数据成员的访问权限允许的话(即public的成员),可在程序中,按上述格式来引用静态数据成员。

    下面举一例子,说明静态数据成员的应用:

    class StaticTest
    {
    public:
        StaticTest(int a, int b, int c);
        void GetNumber();
        void GetSum();
        static void f1(StaticTest &s);
    private:
        int A, B, C;
        static int Sum;
    };
    
    
    
    #include "StaticTest.h"
    #include <iostream>
    using namespace std;
    
    int StaticTest::Sum = 0;//静态成员在此初始化
    
    StaticTest::StaticTest(int a, int b, int c)
    {
        A = a;
        B = b;
        C = c;
        Sum += A + B + C;
    }
    
    void StaticTest::GetNumber()
    {
        cout << "Number = " << endl;
    }
    
    void StaticTest::GetSum()
    {
        cout << "Sum = " << Sum <<endl;
    }
    
    void StaticTest::f1(StaticTest &s)
    {
        
        cout << s.A << endl;//静态方法不能直接调用一般成员,可以通过对象引用实现调用
        cout << Sum <<endl;
    }
    
    #include "StaticTest.h"
    #include <stdlib.h>
    
    
    int main(void)
    {
        StaticTest M(3, 7, 10), N(14, 9, 11);
        M.GetNumber();
        N.GetSum();
        M.GetNumber();
        N.GetSum();
        StaticTest::f1(M);
        system("pause");
        return 0;
    }
    
    展开全文
  • C++ 静态方法和静态属性

    千次阅读 2018-10-10 23:32:18
    来源:我的博客站 OceanicKang |《C++ 静态方法和静态属性》 #include &amp;amp;amp;amp;lt;iostream&amp;amp;amp;amp;gt; #include &amp;amp;amp;amp;lt;string&amp;amp;amp;amp;gt; class ...

    来源:我的博客站 OceanicKang |《C++ 静态方法和静态属性》

    #include <iostream>
    #include <string>
    
    class Pet
    {
    public:
    	Pet(std::string name);
    	virtual ~Pet();
    	static int getCount();
    
    protected:
    	std::string name;
    
    private:
    	static int count;
    };
    
    class Cat : public Pet
    {
    public:
    	Cat(std::string name);
    };
    
    int Pet::count = 0;
    
    Pet::Pet(std::string name)
    {
    	this -> name = name;
    	std::cout << "小猫" << name << "出生了\n";
    	(this -> count)++;
    }
    
    Pet::~Pet()
    {
    	std::cout << "小猫" << this -> name << "死掉了\n";
    	(this -> count)--;
    }
    
    int Pet::getCount()
    {
        // 静态方法里不能访问非静态元素
    	// 这里用 count 而不是 this -> count
    	return count;
    }
    
    Cat::Cat(std::string name) : Pet(name)
    {
    	
    }
    
    int main()
    {
    	Cat cat_1("cat_1");
    	Cat cat_2("cat_2");
    	
    	std::cout << "当前存活" << Pet::getCount() << "只\n";
    	
    	{
    		Cat cat_3("cat_3");
    		Cat cat_4("cat_4");
    		
    		std::cout << "当前存活" << Pet::getCount() << "只\n";
    	}
    	
    	std::cout << "当前存活" << Pet::getCount() << "只\n";
    	
    	return 0;
    }
    

    1.JPG

    • 静态方法里不能使用非静态元素
    • 非静态方法里可以访问类的静态成员和非静态成员
    展开全文
  • c++ 静态方法和静态属性

    千次阅读 2018-08-11 13:16:23
    c++中类的对象有其相应的方法和属性,类本身也有其对象和方法,称为静态方法和静态属性。 在类声明时,在类的属性前加上 static 表示该属性属于类共有的。如 class classname { public: static int get_Num();...

    c++中类的对象有其相应的方法和属性,类本身也有其对象和方法,称为静态方法和静态属性。

    在类声明时,在类的属性前加上 static 表示该属性属于类共有的。如

    class classname

    {

    public:

    static int get_Num();

    private :

    static int classnum;

    }

    classnum属于类classname的静态属性,get_Num()属于其静态方法;

    静态属性要在类定义中声明并初始化,为其分配内存空间;------错了

    正确为: 静态成员变量要在类定义中声明,在类外进行初始化,为其分配内存空间,存在全局变量区

    静态成员是所有对象共享的,所以不能在静态方法里访问非静态的元素;

    非静态方法可以访问类的静态成员,也可以访问类的非静态成员;

    原因:实例化的对象存放在局部变量区,而类的静态成员存放在全局变量区;

    静态方法也可以使用一个普通方法的调用语法来调用,但建议不要这么做,那会让代码变得更糟糕!

    展开全文
  • 作为一个之前一直习惯写java的coder来说,开始写C++时候会有各种不习惯的问题,本来感觉是个显而易见的东西,编译却发现会报错,今天就说一下在C++类里一个静态方法调用静态变量时出现的错误,开始写的代码如下: ...

            作为一个之前一直习惯写java的coder来说,开始写C++时候会有各种不习惯的问题,本来感觉是个显而易见的东西,编译却发现会报错,今天就说一下在C++类里一个静态方法调用静态变量时出现的错误,开始写的代码如下:

    功能很简单,有个静态的test方法,两个静态变量,希望在test里进行调用

    头文件:test.h,

     namespace test{
    class Test{ 
    public:
        static void test();
        static int testInt;  
        static const char * testCode;
    };

     }

    cpp文件:test.cpp

    namespace test{
    class Test{
     void Test::test(){

    testInt=10;

    testCode="test";

    }

     }

    恩,完成,感觉这应该没啥问题,但是编译会报错:undefined reference to 'test::Test::testInt'....字面意思是没定义,有点摸不着头脑,这怎么可能有问题呢,后来google了一番才发现,这种情况需要在cpp文件里,对变量进行显示的初始化才可以,注意是在cpp文件里,对test.cpp文件进行如下修改:

    namespace test{

    int Test::testInt=0;

    const char* Test:: testcode="test";

    class Test{
     void Test::test(){

    testInt=10;

    }

     }

    这样之后就可以顺利运行了。



    展开全文
  • 最近复习C++的一些知识,遇到了一个我比较容易混淆、傻傻分不清的知识点,那就是C++的变量的类型初始化或赋初值,大致有普通成员变量、静态成员变量、成员常量这三种,还有一种组合的静态成员常量。 看到这几种数据...
  • c++静态

    万次阅读 2015-03-09 19:51:12
    C++静态
  • C 链接 C++静态库的方法

    千次阅读 2018-03-13 09:45:23
    C 链接 C++静态库的方法 最近需要用到mp4v2开源库做H264和AAC的存储功能,由于mp4v2库为C++编写的,在使用过程中遇到C 链接C++ 静态库的问题,查找资料后发现很简单,只要链接时加上-lstdc++静态库即可: gcc -o ...
  • 文章目录C++静态成员函数访问非静态成员的几种方法方法一:方法二:方法三:方法四: 方法一: 有一个很取巧的办法,就是在静态函数的形参表里加上实例的地址,也就是 class A { public: static void test(A *a) {...
  • c++调用静态方法

    千次阅读 2014-12-19 18:51:37
    在使用qt的时候,编程风格都是基于C++的,现在要实现一个定时器的功能,即:当事件A发生,开启定时器,以固定时间计时。当定时器时间到了之后,在触发事件B中关闭定时器。在这期间,有可能A事件又发生一次,则计时器...
  • c++静态类实现

    万次阅读 2017-12-16 14:11:10
    c++静态类 静态类 静态类实现 静态类声明
  • C++ 静态成员

    千次阅读 2017-04-26 09:39:55
    C++中,采用静态成员来解决同一个类的对象共享数据的问题。类的静态成员分为静态数据成员和静态成员函数。 1. 静态数据成员  静态数据成员在一个类中只分配一次存储空间,也就是一个类的所有对象的静态数据成员...
  • C++ 静态 常量

    千次阅读 2017-06-06 11:24:38
    C++静态成员变量是用static修饰的成员变量,不属于对象的一部分,而是类一部分,因此可以在没有实例化任何对象的时候使用静态成员变量。但是必须初始化它。 由于静态变量只能被初始化一次,所以初始化成员变量不要...
  • c++静态函数

    千次阅读 2016-08-26 10:34:38
    //c++语言 静态成员数据和静态方法 //对象与对象之间的成员变量是相互独立的.要想共用数据,则需要使用静态成员或静态方法 //#只要在类中声明静态成员变量,即使不定义对象,也可以为静态成员变量分配空间,进而可以使用...
  • 静态成员函数不能访问非静态成员,但可以访问静态成员,也就是说,如果我们的这个类是个单例,我们完全可以在创建的时候把this指针赋值给那个静态成员,然后在静态成员函数内部就可以放心大胆的使用了。 class A { ...
  • C++静态变量

    千次阅读 2019-09-11 11:41:36
    C++中,类的静态成员(static member)必须在类内声明,在类外初始化。 要注意的是,静态成员变量在类中仅仅是声明,没有定义,所以要在类的外面定义,实际上是给静态成员变量分配内存。初始化是...
  • C++静态成员

    千次阅读 2016-02-13 17:41:29
    C++静态数据成员 1.1静态数据成员是一种特殊的数据成员。static int height; 1.2静态数据成员可以通过类名来引用,也可以通过对象来引用。 1.3静态数据成员不属于某一个对象,静态数据成员的存储空间是在静态存储...
  • c++调用静态函数的方法

    千次阅读 2020-08-09 13:09:25
    今天在写c++程序时,发新现在的gcc和vc++对于静态函数的调用方式有所改变,在旧标准的c++中,调用类的静态方法只能用类名::函数名的方式,在新的标准中,类的对像也可以像调用类的方法一样调用静太函数。示例如下: ...
  • C++静态构造函数

    千次阅读 2019-02-21 23:42:28
    C++静态构造函数 如果数据成员被声明为static,那么它在编译时就必须被初始化。仅含static的则放在类之外,实现文件之中;同时含有const的则放在类之内,直接跟在数据的定义之后。 在实际代码编写中碰到的问题是:...
  • C++静态成员与静态函数成员的理解

    万次阅读 2019-02-15 09:21:59
    我们为什么要使用C++静态成员?静态成员能为我们达到什么样的目的? 很多时候我们使用静态成员的目的,在于想让该类的所有对象共同维护一个或者某几个属性成员。即一个类的多个对象共同使用和维护某个(些)属性。 ...
  • C++静态成员变量和静态成员函数

    千次阅读 2015-11-29 20:28:41
    C++静态成员变量和静态成员函数 数据成员可以分静态变量、非静态变量两种.  静态成员:静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态...
  • C++类中静态变量和静态方法使用介绍

    万次阅读 多人点赞 2018-08-14 10:45:26
    刷剑指offer第64题涉及到类内静态成员与方法的知识,有点模糊,找了两篇博客整理一下。 转自:https://www.cnblogs.com/sixue/p/3997324.html  最近一直看c++相关的项目,但总是会被c++类中的静态成员变量与...
  • 一 静态变量 1、静态变量必须在外部定义和赋值 a、不能在 main() 函数中定义 b、不能在类的构造函数中定义 2、必须要定义静态变量,否则该...1、静态方法可以被类直接调用,但是同静态变量一样符合public、priva
  • C++静态

    千次阅读 2015-12-19 10:47:31
    1. 静态类相当于一个sealed ... 使用静态类来包含不与特定对象关联的方法。例如,创建一组不操作实例数据并且不与代码中的特定对象关联的方法是很常见的要求。您应该使用静态类来包含那些方法。 2. 它们仅包含静态成员
  • C++静态常量探究

    千次阅读 2015-05-22 13:18:28
    c++静态常量应用场景及使用方法。 今天想,如果我希望一个类中,具有一些常量,但是不希望常量在各个类的对象中有多份拷贝(占用不必要的内存)。想应该如何定义。 需求细化: 需求1、常量(可以是各种类型) 需求2...
  • C++ 静态编译

    千次阅读 2017-01-04 17:20:31
    静态编译】 静态编译,就是编译器在编译可执行文件的时候,将可执行文件需要调用的对应动态链接库(.so)中的部分提取出来, 链接到可执行文件中去,使可执行文件在运行的时候...2.项目 -> 配置属性->C/C++->代码生
  • 静态成员函数不能访问非静态成员,这是因为静态函数属于类而不是属于整个对象,静态函数中的 member可能都没有分配内存。静态成员函数没有隐含的this自变量。所以,它就无法访问自己类的非静态成员。但我们在一个...
  • C++中的静态变量和静态方法

    千次阅读 2009-06-11 15:18:00
    写了许久的Java和.net,把C++都忘了,到了要用C++静态成员的时候还用Java的思维,结果错的面目全非。 C++中静态变量在类的定义中声明,与Java不一样的是声明的时候不能赋初值:private: static int FLAG;然后再类...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 405,289
精华内容 162,115
关键字:

c++静态方法

c++ 订阅