精华内容
下载资源
问答
  • C++静态成员函数

    2017-03-20 23:46:57
    静态成员函数静态成员函数由于属于整个类,所以它不能访问某个对象的成员变量,因为它没有指向该对象的this指针,但是它可以访问该类的静态成员变量。 要尽量类成员名限定来访问静态成员函数,尽量不要使用对象...

    静态成员函数:

    1. 静态成员函数由于属于整个类,所以它不能访问某个对象的成员变量,因为它没有指向该对象的this指针,但是它可以访问该类的静态成员变量。
    2. 要尽量类成员名限定来访问静态成员函数,尽量不要使用对象来访问。
    3. 静态成员函数可以被继承,基类和派生类都可以共享该静态成员函数。
    4. 类中的任何成员函数都可以访问静态成员函数。
    5. 静态成员函数不能是虚函数。

     

    展开全文
  • C++ 静态成员函数

    2014-03-02 14:44:55
    静态成员函数的定义是在一般函数定义前加上static关键字 调用静态成员函数的格式如下:  类名::静态成员函数名(参数表) #include using namespace std; int s=0; class MyClass { private: static int n;...

    静态成员函数的定义是在一般函数定义前加上static关键字

    调用静态成员函数的格式如下:

            类名::静态成员函数名(参数表

    #include<iostream>
    using namespace std;
    
    int s=0;
    
    class MyClass
    {
    private:
    	static int n; //声明数据成员
    public:
    	MyClass(int a){n=a;}
    	static void add() {s+=n;}
    };
    
    int MyClass::n=0; //静态数据成员初始化
    
    int main()
    {
    	MyClass a(2);
    	MyClass::add();
    	cout<<"s= "<<s<<endl;
    	MyClass b(5);
    	MyClass::add();
    	cout<<"s= "<<s<<endl;
    	return 0;
    }


    展开全文
  • C++静态成员函数访问非静态成员的几种方法 文章目录C++静态成员函数访问非静态成员的几种方法方法一:方法二:方法三:方法四: 方法一: 有一个很取巧的办法,就是在静态函数的形参表里加上实例的地址,也就是 ...

    C++静态成员函数访问非静态成员的几种方法

    方法一:

    有一个很取巧的办法,就是在静态函数的形参表里加上实例的地址,也就是

    class A
    {
    public:
        static void test(A *a)
        {
            a->m_a += 1;
        }
        void hello()
        {
        }
    private:
        static int m_staticA;
        int m_a
    };
    

    这样在你回调函数的时候,你可以通过这个来让本身不能访问成员非静态变量的静态函数来访问非静态成员变量。

    方法二:

    其实这个方法在GLIB中用的很多,就是放上全局变量地址即

    A g_a;
    
    class A
    {
    public:
        static void test()
        {
            g_a.m_a += 1;
        }
        void hello()
        {
        }
    private:
        static int m_staticA;
        int m_a
    };
    

    这种方法我们了解就好,全局变量我们并不推荐。

    方法三:

    大家都知道静态成员函数不能访问非静态成员,但别忘了,他们可以访问静态成员,也就是说,如果我们的这个类是个单例,我们完全可以在创建的时候把this指针赋值给那个静态成员,然后在静态成员函数内部就可以放心大胆的使用了。

    class A
    {
    public:
        A()
        {
            m_gA = this;
            m_a = 999;
        }
        static void test()
        {
            m_gA->m_a += 1;
        }
        void hello()
        {
        }
    private:
        static int m_staticA;
        static A *m_gA;
        int m_a;
    };
    

    方法四:

    和方法一比较像,但他的方向思想更多的是针对内存块这个概念,意思就是在静态函数的形参比加上一个void *的内存首地址,然后在内部做转换

    class A
    {
    public:
        static void test(void *pData)
        {
            A *a = (A *)pData;
            a->m_a += 1;
        }
        void hello()
        {
        }
    private:
        static int m_staticA;
        int m_a
    };
    
    A a;
    test(&a);
    
    展开全文
  • 数据成员静态数据成员是类的一...静态函数成员与非静态函数成员都为类所有,对象中并不存在函数的拷贝(每个对象所占用的存储空间只是该对象的数据成员所占用的存储空间,但是在逻辑上函数和数据是一起被封装进...

    数据成员:

    静态数据成员是类的一部分,为类的所有实例共享(静态区);非静态数据成员,类的每个实例都有一份拷贝(动态区)。

    静态数据成员的访问:

    静态数据成员是类的一部分,在产生任何实例之前已经存在。

    函数成员(都在代码区):

    静态函数成员与非静态函数成员都为类所有,对象中并不存在函数的拷贝(每个对象所占用的存储空间只是该对象的数据成员所占用的存储空间,但是在逻辑上函数和数据是一起被封装进对象的)。静态成员函数和非静态成员函数的根本区别在于有无this指针。非静态函数由对象名.或者对象指针->调用,调用时编译器会向函数传递this指针;静态成员函数则有类名::或者对象名.调用,没有this指针,不识别对象个体,经常用来操作类的静态数据成员。访问类的非静态成员要通过对象来实现。

    内存角度分析:

    类的静态成员(数据成员和函数成员)为类本身所有,在类加载的时候就会分配内存,可以通过类名直接访问;非静态成员(数据成员和函数成员)属于类的实例所有,所以只有在创建类的实例的时候才会分配内存,并通过实例去访问。

     

    注意:类的静态数据成员是静态存储,它是静态生存周期,必须进行初始化

    注意:静态数据成员的初始化在类体外进行前面不加static以免与一般静态变量或者对象混淆。

    静态成员函数访问非静态成员报错:

    类的静态成员在类加载的时候就已经分配内存,而此时类的非静态成员尚未分配内存,访问内存中不存在的东西自然会出错。

     

    #include<iostream>
    
    using namespace std;
    
    class StaticTest
    {
    public:
    	StaticTest(int a){A=a;B++;}  // B实际为类实例化的对象的个数
    	static void printTest(StaticTest t);
    private:
    	int A;
    	static int B;
    };
    void StaticTest::printTest(StaticTest t)
    {
    	cout<<"t.A: "<<t.A<<endl;
    	cout<<"StaticTest::B: "<<StaticTest::B<<endl;
    	cout<<"t.B: "<<t.B<<endl;
    }
    int StaticTest::B=0;
    int main()
    {
    	StaticTest a1(66);
    	StaticTest::printTest(a1);
    	StaticTest a2(88);
    	StaticTest::printTest(a2);
    	return 0;
    }

     

    展开全文
  • 静态成员函数与类内静态变量相似,属于类,但是独立于对象存在,是共有的。而非静态成员函数属于类,依赖于对象。 静态成员函数没有存在对象的时候,是无法访问到依赖对象的非静态成员函数的,也不存在this指针。 ...
  • 1.C++静态成员函数的地址可用普通函数指针储存,而普通成员函数地址需要用 类成员函数指针来储存。 举例如下:class base{ static int func1(); int func2(); }; int (*pf1)()=&base::func1;//普通的函数...
  • 其实我们从直观上可以很好的理解静态成员函数不能调用非静态成员变量这句话因为无论是静态成员函数还是静态成员变量,它们都是在类的范畴之类的,及在类的整个生存周期里始终只能存在一份。然而非静态成员变量和非...
  • 静态成员函数不能访问非静态成员,但可以访问静态成员,也就是说,如果我们的这个类是个单例,我们完全可以在创建的时候把this指针赋值给那个静态成员,然后在静态成员函数内部就可以放心大胆的使用了。 class A { ...
  • #include #include class Class; typedef struct { Class *pClass; int x; int y; }ParaNode; class Class { public: int i; void Seti(int index) ... bool SaneCommandSASTest(int x,int
  • c++静态成员函数的作用

    千次阅读 2019-06-18 14:08:22
    静态成员函数主要为了调用方便,不需要生成对象就能调用。 比如: class X { public: void MethodA(); static void MethodB(); } 此时MethodB可以直接调用,X::MethodB(); MethodA必须先生成类对象才能调用...
  • 静态成员函数不能访问非静态成员,这是因为静态函数属于类而不是属于整个对象,静态函数中的 member可能都没有分配内存。静态成员函数没有隐含的this自变量。所以,它就无法访问自己类的非静态成员。但我们在一个...
  • C++ 静态成员函数使用不需要声明

    千次阅读 2015-11-15 17:30:03
    C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有对象共用。所以在所有对象中都可以共享它。...在C++中类的静态成员变量和静态成员函数是个容易出错的地方,本文先通过几个例子来总结静
  • C++静态成员函数和静态数据成员

    千次阅读 2014-08-05 22:47:10
    当将类的某个数据成员声明为static时,该静态数据成员只能被定义一次,而且要被同类的所有对象共享。各个对象都拥有类中每一个普通数据成员的副本,但静态数据成员只有一个实例存在,与定义了多少类对象无关。静态...
  • 看开源代码看到类的静态成员函数可以使用的类内定义的枚举值,似乎与之前学习的时候看到静态成员函数只能调用类内的静态成员变量。于是做了一个小实验,发现真的可以,不知如何解释。做一个小的记录,有时间调查一下...
  • 可以把静态成员函数看作是“命名空间受限的普通函数”,所以它不能有运行时多态 发布于 2015-06-23 添加评论 感谢  分享  收藏 • 没有帮助 • 举报 • 作者保留权利 ...
  • 算是对《深度探索C++对象模型 h》
  • 也就是说,在静态成员函数中不能调用非静态成员,包括非静态成员函数和非静态成员变量。静态成员函数只能访问静态成员变量。 如果把上述代码中对x、y的赋值操作放在非静态函数中,就会成功。 但是,在非静态...
  • 如果C++的类中含有静态成员函数,那么该如何考虑其线程安全性呢? 见下面实例: class CData { public: static void func() { int a; static int b; }
  • } static函数没有this指针, 故不能访问类的非静态成员变量, 不能调用非静态的成员函数。且看: #include using namespace std; class A { public: int x; void static print() { cout ; // 没有this, 所以不知道x...
  • C++静态成员函数的一些特性
  • C++静态成员变量和静态成员函数

    千次阅读 2015-11-29 20:28:41
    C++静态成员变量和静态成员函数 数据成员可以分静态变量、非静态变量两种.  静态成员:静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态...
  • c++ 静态成员函数用static 关键字来声明,用于处理静态成员变量,可以用类名来调用,也可以用对象名来调用。 测试代码: #include <iostream> using namespace std; class Point{ public: Po...
  • C++静态成员变量与静态成员函数

    千次阅读 多人点赞 2019-05-26 20:06:48
    类的静态成员有两种:静态成员变量和静态成员函数,语法是在普通成员变量和成员函数前加static关键字。 0、定义 class CRectangle{ public: void show();//普通成员函数 static void printTotal();//静态成员...
  • C++静态成员函数

    2013-12-27 08:50:32
    C++静态成员函数 1. 静态成员函数不可以调用类的非静态成员。因为静态成员函数不含this指针。 2. 静态成员函数不可以同时声明为 virtual、const、volatile函数。 C++静态成员在Class中仅限声明,但没有定义,不能...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 160,872
精华内容 64,348
关键字:

c++静态成员函数

c++ 订阅