精华内容
下载资源
问答
  • 本篇文章主要介绍了C++中的普通成员函数、虚函数以及纯虚函数,非常的详细,有需要的朋友可以参考下
  • 定义一个形状类(抽象类)以及一个普通成员函数(用来重设形状大小)、两个纯虚成员函数-周长计算函数和面积计算函数,利用该类及其派生类实现圆形、三角形、矩形和梯形等图形的周长和面积的计算;主函数完成基类和...
  • 代码详解了普通成员函数、普通类成员函数和类静态成员函数的使用方法,已测试,可直接使用
  • C++普通函数,普通成员函数、静态成员函数的区别

    千次阅读 多人点赞 2017-05-13 22:24:53
    1普通函数:属于全局函数,不受具体类...普通成员函数本质上是一个包含指向具体对象this指针的普通函数,即c++类的普通成员函数都隐式包含一个指向当前对象的this指针。 例如:定义一个类: class myClass { publi

    1普通函数:属于全局函数,不受具体类和对象的限制,可以直接调用。

    例如:

    void printf()

    {

    printf("Hello World");

    }

    2普通成员函数:C++ 普通成员函数本质上是一个包含指向具体对象this指针的普通函数,即c++类的普通成员函数都隐式包含一个指向当前对象的this指针。

    例如:定义一个类:

    class   myClass

    {

    public:

    void  myprint()

    {

    printf("m_a:%d",m_a);

    }

    private:

    int  m_a;

    };

    void main()

    {

    myClass  A1(5);

    A1.myprint();

    }

    main函数里面调用普通成员函数:A1.myprint()等价于myprint(&A1)。这是因为c++编译器实现普通成员函数的时候,void  myClass::myprint()的本质是普通函数void  myprint(myClass *this);

    3静态成员函数

    首先介绍类的静态成员变量: 类体中的数据成员的声明前加上static关键字,该数据成员就成为了该类的静态数据成员。

    静态成员变量的性质:

    1static型变量只被初始化一次,下次执行初始化语句会直接跳过。

    2static 说明一个类的成员为静态成员,经过static修饰的成员变量属于这个类,不再仅仅属于具体的对象。

    再介绍静态成员函数: 类体中的成员函数的声明前加上static关键字,该成员函数就成为了该类的静态成员函数。

    静态成员函数的性质:

    1)不可以调用类的非静态成员。

    2)静态成员函数不含this指针。 静态成员函数属于这个类,不再仅仅属于具体的对象。

    因此类的静态成员函数和类的普通成员函数的区别是:

    静态成员函数不包含指向具体对象的this指针

    普通成员函数包含一个指向具体对象的this指针


    展开全文
  • 普通成员函数和静态成员函数

    千次阅读 2018-03-25 19:47:25
    类成员包括数据成员和成员函数。 两者区别 1分配内存的时间不同 静态成员属于类本身,不属于具体类对象,在类加载时分配内存空间,程序结束时才消失。可以类名直接访问。 普通成员属于类对象,在类对象创建...

    注:普通成员又名非静态成员。静态(static)成员。类成员包括数据成员和成员函数。

    两者区别

    1分配内存的时间不同

    静态成员属于类本身,不属于具体类对象,在类加载时分配内存空间,程序结束时才消失。可以类名直接访问。
    普通成员属于类对象,在类对象创建时(类的实例)才会分配内存,即动态加载内存,不用时消失。通过类对象去访问。
    注:静态成员不能去访问普通成员,因为静态成员存在于普通成员之前,我们不能去访问一个内存中不存在的东西。

    2是否传递this指针

    普通成员函数传递this指针。实质是一个包含指向具体对象的this指针的函数,即其隐式包含一个指向当前对象的this指针。
    静态成员函数不传递this指针。
    注:也就是说静态成员函数不接受隐含的this指针,无法直接访问类中的非静态成员。

    3成员函数间访问

    普通成员可以访问静态成员;
    静态成员函数只能通过对象间接引用非静态成员。
    代码如下:

    #include<iostream> 
    using namespace std;
    class A{
        public:
            void generalFun(){//实质void generalFun(A*this)
                cout<<"this is general fun"<<endl;
            }
            static void staticFun(A a){
                a.generalFun();//实质generalFun(&a)
                cout<<"this is static fun"<<endl; 
            }
        private:
            int a;
            static int b;
    }; 
    int A::b=1;//静态数据成员是静态存储,必须初始化。1在类体外初始化;2使用作用域运算符表明它所属的类。
    int main(){
        A a;
        A::staticFun(a);
        return 0;
    }
    //运行结果如下:
    this is general fun
    this is static fun

    注:

    1静态数据成员初始化格式如下:
    <数据类型> <类名>::<静态数据成员名>=<值>
    引用格式:
    <类名>::<静态成员名(成员数据/成员函数)>

    2静态成员变量性质:
    1只能被初始化一次,下次执行该语句时自动跳过。
    2属于类,而非具体对象

    3静态成员函数性质:
    1不包含指向具体对象的this指针;
    2不可以直接调用普通成员。
    3类加载时分配内存空间属于类而非具体对象。

    展开全文
  • 类中的静态成员函数属于全局函数属于所有该类对象共有,不是属于某单独的一个类的对象,类中普通成员函数是单独的对象所拥有;既然说静态成员函数属于全局函数,那么为什么不向其他全局函数一样写在类的外部呢?原因...

    类中的静态成员函数属于全局函数属于所有该类对象共有,不是属于某单独的一个类的对象,

    类中普通成员函数是单独的对象所拥有;


    既然说静态成员函数属于全局函数,那么为什么不向其他全局函数一样写在类的外部呢?

    原因是将类的静态成员函数封装在类中,是为了只让该类对象可以访问静态成员函数,而不让去其他类对象来访问。写在类中起到保护的作用。

    展开全文
  • 成员函数:无论静态函数还是非静态函数,都是属于类的(这一点与数据成员的静态非静态不同),对象并不拥有函数的拷贝.两者的区别在于:非静态的函数由类对象(加.或指针加-&gt;;)调用,这时将向函数传递this指针.而静态...

    成员函数:无论静态函数还是非静态函数,都是属于类的(这一点与数据成员的静态非静态不同),对象并不拥有函数的拷贝.两者的区别在于:非静态的函数由类对象(加.或指针加->;)调用,这时将向函数传递this指针.而静态函数由类名(::)(或对象名.)调用,但静态函数不传递this指针,不识别对象个体,所以通常用来对类的静态数据成员操作.

    程序最终都将在内存中执行,变量只有在内存中占有一席之地时才能被访问。

    类的静态成员(变量和方法)属于类本身,在类加载的时候就会分配内存,可以通过类名直接去访问;非静态成员(变量和方法)属于类的对象,所以只有在类的对象产生(创建类的实例)时才会分配内存,然后通过类的对象(实例)去访问。

    在一个类的静态成员中去访问其非静态成员之所以会出错是因为在类的非静态成员不存在的时候类的静态成员就已经存在了,访问一个内存中不存在的东西当然会出错。

    C++会区分两种类型的成员函数:静态成员函数和非静态成员函数。这两者之间的一个重大区别是,静态成员函数不接受隐含的this自变量。所以,它就无法访问自己类的非静态成员。

    静态数据成员

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

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

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

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

    2、静态成员初始化与一般数据成员初始化不同。静态数据成员初始化的格式如下:
         <数据类型><类名>::<静态数据成员名>=<值>

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

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

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

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

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

    <类名>::<静态成员名>

    静态成员函数

        静态成员函数和静态数据成员一样,它们都属于类的静态成员,它们都不是对象成员。因此,对静态成员的引用不需要用对象名。

    静态成员函数的实现中不能直接引用类中说明的非静态成员,可以引用类中说明的静态成员。如果静态成员函数中要引用非静态成员时,可通过对象来引用。下面通过例子来说明这一点。

    复制代码
    #include <iostream>
    using namespace std;
    
    class M
    {
    
    public:
         M(int a) { A=a; B+=a;}
         static void f1(M m);
    private:
         int A;
         static int B;
    };
    
    void M::f1(M m)
    {
         cout<<“A=”<<m.A<<endl; //静态成员函数中通过对象来引用非静态成员
         cout<<“B=”<<B<<endl;
    }
    
    int M::B=0; //静态数据成员初始化的格式<数据类型><类名>::<静态数据成员名>=<值>
    
    void main()
    {
         M P(5),Q(10);
         M::f1(P); //静态成员函数调用时不用对象名
         M::f1(Q);
    }
    复制代码

     

    读者可以自行分析其结果。从中可看出,调用静态成员函数使用如下格式:

    <类名>::<静态成员函数名>(<参数表>);

    运行结果:

    A=5

    B=15

    A=10

    B=15

    https://www.cnblogs.com/jianglei-tz/articles/static-member-function.html

    展开全文
  • 常数据成员: const 类型说明符 数据成员 如:const int year 常成员函数:类型说明符 函数名(参数表) const ...2.常数据成员可以被常成员函数访问,也可被普通成员函数访问。 3.如果将一个对象说明为一个常对象,...
  • 成员函数:无论静态函数还是非静态函数,都是属于类的(这一点与数据成员的静态非静态不同),对象并不拥有函数的拷贝.两者的区别在于:非静态的函数由类对象(加.或指针加->;)调用,这时将向函数传递this指针.而静态函数由...
  • 虚函数与普通成员函数的区别

    千次阅读 2017-12-12 17:43:47
    问题:类A中使用了类B的成员函数fun(非虚),没有问题。但考虑到,类B以后可能会被继承,所以将类B的fun改为virtual。修改后,程序崩溃。
  • Python:普通成员函数、类成员函数、静态函数 Python 中的类也是一个普通对象,如果需要直接使用这个类,例如将类作为参数传递到其他函数中,又希望在实例化这个类之前就能提供某些功能,那么最简单的办法就是使用 ...
  •  普通成员函数依赖一个类的对象,也就是它有一个隐藏的调用参数(this)指针,必须指向一个类的对象。 区别2:  静态函数只能访问类中的静态成员变量; 区别3::  如果成员函数想作
  • 静态成员函数和普通成员函数的区别?   静态函数只有当程序结束的时候才从内存消失。而非静态则是动态加载到内存,不需要的时候就从内存消失   静态成员不属于对象,而属于类。不创建对象也可调用。   从...
  • C++ 类(const修饰普通成员函数)

    千次阅读 2018-07-21 16:23:15
    const修饰普通成员函数 全局函数和成员函数 const修饰普通成员函数 我们知道this指针指向的是具体的对象,普通的成员函数存在(加深记忆),设计this指针的时候格式为*const this(常量指针)。我们看下面的代码: ...
  • 主要介绍了C++普通函数指针与成员函数指针,很重要的知识点,需要的朋友可以参考下
  • 博文地址:https://blog.csdn.net/maoyeahcom/article/details/107106680
  • 友元函数是在类中用关键字friend修饰的友元函数,友元函数可以是一个普通的函数,也可以是其他类的成员函数。虽然它不是本类的成员函数,但是在它的函数体中可以通过对象名访问类的私有和保护成员。 ...
  • 之前一直以为C++成员函数没法取地址,一直使用静态函数来充当回调函数,直到近日看别人的代码才发现类成员函数也有指针。。。总结记录一下。 普通函数指针 这面是普通函数的 指针的使用方法。 #include &lt;...
  • 普通成员函数需要实例化才能调用,对于每一个实例来说,普通成员函数是自己独有的。 #include&lt;iostream&gt; class Person { public: void ordinaryfunc();//声明一个普通成员函数 void sta...
  • delete是C++中的一个运算符,它是和new配合起来使用。我们知道new的实际操作是先分配一块内存,再调用对象的构造函数。...这里类的成员函数,大致分成类的普通成员函数和析构函数中对delete的调用。 实践是最好的...
  • 相当于是熟悉一种语法吧 class Test { public: static void StaticFunc() ... printf("StaticFunc \n");...静态成员函数函数指针操作同全局函数一样;毕竟静态成员函数不需要绑定到某个对象身上。  
  • c++的成员函数根据其调用的不同,大致可以分为4类:内联成员函数,静态成员函数,虚成员函数和上述3种以外的普通成员函数。从本质来说类成员函数和全局函数在调用上并没有差别,非内联函数的在调用时,基本上都包括...
  • 1.类成员函数指针调用  注意:如果在类内调用,则函数指针声明要放在类里面.如果是类外调用,则函数指针声明放在调用类中. CFunCall.h文件: class CFunCall { typedef int (CFunCall::*CLASSFUNC)(int); public: ...
  • 成员函数初始化列表

    千次阅读 2020-05-20 20:00:43
    d)如果你的成员变量类型是某个类类型,而这个类的构造函数带参数时; 2、使用初始化列表的优势(提高效率) 除了必须用初始化列表的场合,我们用初始化列表还有什么其他目的? 有,就是提高程序运行效率。 对于类类型...
  •  普通成员函数依赖一个类的对象,也就是它有一个隐藏的调用参数(this)指针,必须指向一个类的对象。 区别2:  静态函数只能访问类中的静态成员变量; 区别3::  如果类的成员函数想作为回调函数来使用,如创建...
  • 静态成员数据.好象在使用之前都要初始化在cpp里int C**Dlg:: abc = 9;
  • 静态数据成员和静态数据成员函数

    千次阅读 多人点赞 2016-12-27 15:25:29
    c++中的static静态数据成员和静态成员函数应该是让大家比较头疼的东西,好像也是找工作公司面试中常常问到的东西。我自己也深有体会,在学习c++的过程中,总感觉static很烦人,但是又是一个必须懂的东西,所以今天就...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 259,767
精华内容 103,906
关键字:

普通成员函数

友情链接: datastore-master.rar