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

    2019-07-12 22:15:05
    https://blog.csdn.net/luyuncsd123/article/details/9118463
    展开全文
  • C++ 静态函数与虚函数的区别

    千次阅读 2020-03-02 19:57:51
    经常在网上看到大家在讨论静态函数与虚函数的区别,往往可以看到统一的答案是:静态函数在编译的时候就已经确定运行时机,虚函数在运行的时候动态绑定。虚函数因为用了虚函数表机制,调用的时候会增加一次内存开销。 ...

    经常在网上看到大家在讨论静态函数与虚函数的区别,往往可以看到统一的答案是:静态函数在编译的时候就已经确定运行时机,虚函数在运行的时候动态绑定。虚函数因为用了虚函数表机制,调用的时候会增加一次内存开销。
    这个答案是正确的,但是一般不懂得虚函数表原理的人,看了可能也是一头头雾水。下面我们就先来说说什么是虚函数表:
    虚函数表: 当一个类中包含被virtual 关键字修饰的成员函数时,该成员函数就成为了一个虚函数。头一个含有虚函数的类锁所实例化出来的对象都拥有同一个虚函数表,在对象中含有一个虚函数指针 *_vptr, 该指针指向该类的虚函数表,虚函数表保存的是类中虚函数的地址(一个类可能有多个虚函数)。

    了解了什么是虚函数,大家可能会问:
    虚函数有什么用呢?
    当一个子类继承了一个含有虚函数的基类,并重写了该基类中的一个虚函数,我们就说这两个类构成多态。子类继承基类的同时,基类的虚函数表也被子类继承,不同的是被子类重写的虚函数将会替代原来虚函数表中对应的基类的虚函数的地址。从而基类与子类调用同名的虚函数时,所调用的就不是同一个函数,从而体现了多态和虚函数表的作用。

    接下来我们讨论标题的问题:
    静态函数与虚函数的区别?
    我们知道类的静态函数是没有this指针的,调用它时不需要创建对象,通过:类名 ::函数名(参数)的形式直接调用。静态函数只有唯一的一份,因此它的地址是固定不变的, 所以编译的时候但凡遇到调用该静态函数的时候就知道调用的是哪一个函数,因此说静态函数在编译的时候就已经确定运行时机。 而虚函数则不然,看下面的代码:

    class A
    {
    	public: 
    	virtual void fun()
    				{
    						cout<<"i am A <<endl;
    				}
    }
    
    class B: public A
    {
    	public:
    	virtual  void  fun()
    	{
    			cout<<"I  am  B" <<endl;
    		}
    };
    int main()
    {
    	A  a ;
    	B b;
    	A*  pb = &b;
    	pb->fun();
    	return 0; 
    }
    

    类A与类B构成多态,创建了 A类指针pb指向 B类对象,当程序编译的时候只对语法等进行检测,该语句没有什么问题,但是编译器此时无法确定调用的是哪一个 fun() 函数,因为类A类B中都含有fun函数,因此只能是在程序运行的时候通过 pb指针 查看对象的虚函数表(访问虚函数表就是所谓的访问内存 内存)才能确定该函数的地址,即确定调用的是哪一个函数。这就解释了所说的“虚函数在运行的时候动态绑定。虚函数因为用了虚函数表机制,调用的时候会增加一次内存开销。
    以上就是我对静态函数与虚函数区别的理解。理解不对的地方希望大家指出,共同进步谢谢!!

    展开全文
  • 应用场景: 要求: 1,某个C++工程中,需要在很多个类对象中,获取一个分类信息,并根据分类信息执行...2,类的静态函数;   功能代码段一: #ifndef CATEGORYINFO #define CATEGORYINFO #include "SF_RFID_Com
    应用场景:
    要求:
    1,某个C++工程中,需要在很多个类对象中,获取一个分类信息,并根据分类信息执行不同的操作;
    2,该分类信息需要在工程代码的入口类构造函数中赋值,其他地方最好限制为只读。
    待选方案:
    1,全局结构体变量;2,类的静态函数;

     
    功能代码段一:
    #ifndef CATEGORYINFO
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    g_stCategoryInfo
    
    
    
     
    
    
    
    
    
    
     
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
     
    
    
    
    
    
    
    展开全文
  • C++静态成员和静态成员函数 从C++书上了解了C++的静态成员和静态成员函数,但不是很清楚有什么用,在网上搜了两篇大牛写的博客看了下, 下面是我的一些总结。 1.静态成员 C++的静态成员类似于全局变量,是在程序...
    C++静态成员和静态成员函数

    从C++书上了解了C++的静态成员和静态成员函数,但不是很清楚有什么用,在网上搜了两篇大牛写的博客看了下,

    下面是我的一些总结。
    1.静态成员
    C++的静态成员类似于全局变量,是在程序编译后就已经分配了空间,而不同于类中的其他成员,是在为类
    实例化一个对象时才为此对象的成员分配空间。因此,静态成员是不属于任何一个对象,但能够被所有对象
    共享。

    静态成员的作用:一般是作为所有对象所共享的数据,尽管能够使用全局变量实现此功能,但静态成员要比
    全局变量更加安全,原因是有时的要求一般都是只需要该类的对象共享,而全局变量则是让所有的类的对象
    共同使用。

    静态成员的使用:定义在类中,前面加上static关键字,不能在类中初始化,需要在类外面或者是在主函数
    之前重新定义并初始化(缺省时默认初始化为0)。
    例如:
    class DATE
    {
    public: //实际中一般设为private,这里是为了在主函数中访问
        static int year ;
    };
    int DATE::year = 10 ; //重新定义
    int main()
    {
        DATE a1, a2 ;
        cout << a1.year << endl
         << a2.year << endl
            << DATE::year << endl ; //因为不属于任何一个对象,可以直接通过类名访问
        return 0 ;
    }



    2.静态函数
    C++中的静态函数也是为所有对象共有,那么就是所有的对象都使用相同的静态函数,故在静态函数中无法
    直接使用非静态成员,因为非静态成员对于不同的对象来说是不同的,一般是通过this指针进行访问,而
    静态函数是共享的,故不存在this指针,但是可以通过参数传递来进行访问。

    静态函数的作用:一个最基本的作用就是当所有的对象都需要进行一个固定不变的操作是可以把其作为一个
    静态函数来处理;而实际中静态函数一般存在是为了对静态成员进行处理(一般是初始化处理)和仅使用
    静态成员的操作。

    静态函数的使用

    例如:

    class DATE
    {
    public:
        static int year ;
    public:
        static void init_year() ;
    };
    
    int DATE::year ;
    void DATE::init_year() //注意对静态成员函数的实现时不加static
    {
        year = 2013 ;
    }
    int main()
    {
        DATE::init_year() ; //调用静态函数初始化静态成员
        cout << DATE::year << endl ;
        return 0 ;
    }
    说明:对静态函数的实现时不加关键字static,大牛的博客中解释是因为关键字static不是数据类型的组成部分,
    故不加,具体我也不是很清楚。

    后面两点注意是直接引用了大牛的博客:

    D,不能把静态成员函数定义为虚函数。静态成员函数也是在编译时分配空间,所以在程序的执行过程中不能提供多态性。

    E,可将静态成员函数定义为内联(inline),其定义方法与非静态成员函数完全相同。

    参考http://blog.csdn.net/devilkin64/article/details/5952475
    C/C++静态成员变量和静态成员函数
    参考http://blog.sina.com.cn/s/blog_7fa6b06f01016n13.html
    11C++静态成员

    展开全文
  • C++静态构造函数

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

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

    千次阅读 2019-05-01 17:17:30
    一点睛 与静态数据成员不同,静态成员函数的作用...静态成员函数和非静态成员函数的根本区别:非静态成员函数有this指针,而非静态成员函数没有this指针。由此决定了静态成员函数不能访问本类中的非静态成员。 静...
  • C++虚函数 - 静态函数能否为虚函数 .

    千次阅读 2019-05-07 15:05:57
    1.virtual与静态函数 C++中,静态成员函数不能被声明为virtual函数。 例如,下面的程序会编译失败。 class Test { public: // 编译错误:static成员函数不能声明为virtual virtual static void fun() { } }; 同样地...
  • C++虚函数(4) - 静态函数能否为虚函数
  • c/c++静态变量和静态函数

    千次阅读 2018-11-11 15:32:26
    而内存主要分为两类:静态存储区和动态存储区; 静态存储区分为:只读数据(READONLY DATA)区、以读写数据(RW DATA)区、未初始化区(BSS)。它们都是在程序编译连接阶段确定的,在程序执行的阶段不会改变。 ...
  • C++Static 静态函数调用非静态函数

    千次阅读 2018-01-12 21:21:44
    test.h class test : { public: test(void); ~test(void); public: //你的其他函数 ... .... protected: //你的其他函数 ... ... static void CALLBACK TimeProcFu(HWND hwnd,UINT messa
  • 数据成员: 静态数据成员是类的一...静态函数成员与非静态函数成员都为类所有,对象中并不存在函数的拷贝(每个对象所占用的存储空间只是该对象的数据成员所占用的存储空间,但是在逻辑上函数和数据是一起被封装进...
  • c++调用静态函数的方法

    千次阅读 2020-08-09 13:09:25
    今天在写c++程序时,发新现在的gcc和vc++对于静态函数的调用方式有所改变,在旧标准的c++中,调用类的静态方法只能用类名::函数名的方式,在新的标准中,类的对像也可以像调用类的方法一样调用静太函数。示例如下: ...
  • 静态函数: 1. 函数和变量,声明为静态,在类定义的时候分配了内存空间,存放在静态区,可以被类的多个对象公用。而类中非静态函数和变量,在类实例化时才分配内存空间,存放在栈中,被类的对象独占。 2. 静态函数...
  • 二、C函数的DLL,C++静态调用。 1、CDLL.h文件#ifndef __CDLL_H__ #define __CDLL_H__ extern int _declspec(dllexport) foo(int x, int y); #endif2、CDLL.c文件:#include "CDLL.h" int foo(int x, int y) { ...
  • 浅谈C++静态构造函数

    2013-03-18 13:33:30
    在使用静态构造函数的时候应该注意几点: 1、静态构造函数既没有访问修饰符,也没有参数。因为是.NET调用的,所以像public和private等修饰符就没有意义了。...3、一个类只能有一个C++静态构造函数
  • C++静态构造函数的实现

    千次阅读 2013-10-13 01:53:43
    在C#中,类的静态构造函数用于在使用类之前进行相关的初始化工作;比如,初始化静态成员或...下面是MSDN对C++静态构造函数特点的描述: 1.静态构造函数既没有访问修饰符,也没有参数 2.在创建第一个实例或引用任
  • C++静态成员和函数

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

    万次阅读 2011-12-29 18:17:28
    C++静态变量和静态函数的小结 最近由于工作的关系,要做一个简单的输入法,当然是要移植到arm板上去的。没有想自己做,就到网上找到两个用Qt输入法打代码,自己整合了一下,最后的效果差强人意吧!在这里把整合中...
  • 有一个很取巧的办法,就是在静态函数的形参表里加上实例的地址,也就是 class A { public: static void test(A *a) { a->m_a += 1; } void hello() { } private: static int m_staticA; int
  • C++ 静态数据成员与静态成员函数

    千次阅读 2017-05-12 14:40:11
    在类中的数据成员或成员函数定义或声明前以static关键词开头,即构成静态数据成员与静态成员函数静态数据成员1.静态数据成员的实现class Time { public : void showtime(); private: static int hour; //定义...
  • C++静态成员变量和静态成员函数

    千次阅读 2015-11-29 20:28:41
    C++静态成员变量和静态成员函数 数据成员可以分静态变量、非静态变量两种.  静态成员:静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态...
  • 2.静态数据成员往往数私有的,静态数据成员不能直接访问,要通过定义为公有的静态函数成员来访问静态数据成员。 部分代码描述: 定义货物类,私有成员有货物重量,货物总重量(静态数据成员),初始化静态数据成员...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 307,712
精华内容 123,084
关键字:

c++静态函数

c++ 订阅