精华内容
下载资源
问答
  • 成员函数(简称函数)是函数的一种,它的用法和作用和前面介绍...例如私有的成员函数只能被本中的其它成员函数所调用,而不能被类外调用。成员函数可以访问本中任何成员(包括私有的和公用的),可以引用本作

    类的成员函数(简称类函数)是函数的一种,它的用法和作用和前面介绍过的函数基本上是一样的,它也有返回值和函数类型,它与一般函数的区别只是:它是属于一个类的成员,出现在类体中。它可以被指定为private(私有的)、public (公用的)或protected(受保护的)。

    在使用类函数时,要注意调用它的权限(它能否被调用)以及它的作用域(函数能使用什么范围中的数据和函数)。例如私有的成员函数只能被本类中的其它成员函数所调用,而不能被类外调用。成员函数可以访问本类中任何成员(包括私有的和公用的),可以引用在本作用域中有效的数据。

    一般的做法是将需要被外界调用的成员函数指定为public,它们是类的对外接口。但应注意,并非要求把所有成员函数都指定为public。有的函数并不是准备为外界调用的,而是为本类中的成员函数所调用的,就应该将它们指定为private。这种函数的作用是支持其它函数的操作,是类中其它成员的工具函数(utility function),类外用户不能调用这些私有的工具函数。

    类的成员函数是类体中十分重要的部分。如果一个类中不包含成员函数,就等同于C语言中的结构体了,体现不出类在面向对象程序设计中的作用。

    在类外定义成员函数

    在前面已经看到成员函数是在类体中定义的。也可以在类体中只写成员函数的声明,而在类的外面进行函数定义。如:

    class Student
    {
    public :
    void display( ); //公用成员函数原型声明
    private :
    int num;
    string name;
    char sex;
    //以上3行是私有数据成员
    };
    void Student::display( )//在类外定义display类函数
    {
    cout<<"num:"<<num<<endl;
    cout<<"name:"<<name<<endl;
    cout<<"sex:"<<sex<<endl;
    }
    Student stud1,stud2; //定义两个类对象
    

    注意:在类体中直接定义函数时,不需要在函数名前面加上类名,因为函数属于哪一个类是不言而喻的。

    但成员函数在类外定义时,必须在函数名前面加上类名,予以限定(qualifed)," :: "是作用域限定符(field qualifier)或称作用域运算符,用它声明函数是属于哪个类的。

    如果在作用域运算符“::”的前面没有类名,或者函数名前面既无类名又无作用域运算符“::”,如
    ::display( ) 或 display( )
    则表示display函数不属于任何类,这个函数不是成员函数,而是全局函数,即非成员函数的一般普通函数。

    类函数必须先在类体中作原型声明,然后在类外定义,也就是说类体的位置应在函数定义之前,否则编译时会出错。

    虽然函数在类的外部定义,但在调用成员函数时会根据在类中声明的函数原型找到函数的定义(函数代码),从而执行该函数。

    在类的内部对成员函数作声明,而在类体外定义成员函数,这是程序设计的一种良好习惯。如果一个函数,其函数体只有2-3行,一般可在声明类时在类体中定义。多于3行的函数,一般在类体内声明,在类外定义。

    展开全文
  • 在类外定义成员函数 成员函数可以在类体中直接定义。也可以在类体中只写成员函数的声明,而在类的外面进行函数定义。如: class Student { public : void display( ); //公用成员函数原型声明 private : int ...

    在类外定义成员函数

    成员函数可以在类体中直接定义。也可以在类体中只写成员函数的声明,而在类的外面进行函数定义。如:

    class Student
    {
    public :
        void display( ); //公用成员函数原型声明  
    private :
        int num;
        string name;
        char sex;
        //以上3行是私有数据成员
    };
    void Student::display( )//在类外定义display类函数  
    {
        cout<<"num:"<<num<<endl;
        cout<<"name:"<<name<<endl;
        cout<<"sex:"<<sex<<endl;
    }
    Student stud1,stud2; //定义两个类对象

    注意:在类体中直接定义函数时,不需要在函数名前面加上类名,因为函数属于哪一个类是不言而喻的。但成员函数在类外定义时,必须在函数名前面加上类名,予以限定(qualifed),” :: “是作用域限定符(field qualifier)或称作用域运算符,用它声明函数是属于哪个类的。:: 可以不跟类名,表示全局数据或全局函数(即非成员函数)。

    int month;//全局变量
    int day;
    int year;
    void Set(int m,int d,int y)
    {
        ::year=y; //给全局变量赋值,此处可省略
        ::day=d;
        ::month=m;
    }
    
    Class Tdate
    {
        public:
            void Set(int m,int d,int y) //成员函数
            {
                ::Set(m,d,y); //非成员函数
            }
        private:
            int month;
            int day;
            int year;
    }

    类函数必须先在类体中作原型声明,然后在类外定义,也就是说类体的位置应在函数定义之前,否则编译时会出错。虽然函数在类的外部定义,但在调用成员函数时会根据在类中声明的函数原型找到函数的定义(函数代码),从而执行该函数。在类的内部对成员函数作声明,而在类体外定义成员函数,这是程序设计的一种良好习惯。如果一个函数,其函数体只有2-3行,一般可在声明类时在类体中定义。多于3行的函数,一般在类体内声明,在类外定义。

    inline 成员函数

    在类体中定义的成员函数的规模一般都很小,而系统调用函数的过程所花费的时间开销相对是比较大的。调用一个函数的时间开销远远大于小规模函数体中全部语句的执行时间。为了减少时间开销,如果在类体中定义的成员函数中不包括循环等控制结构,C++系统会自动将它们作为内置(inline)函数来处理。也就是说,在程序调用这些成员函数时,并不是真正地执行函数的调用过程(如保留返回地址等处理),而是把函数代码嵌入程序的调用点。这样可以大大减少调用成员函数的时间开销。C++要求对一般的内置函数要用关键字inline声明,但对类内定义的成员函数,可以省略inline,因为这些成员函数已被隐含地指定为内置函数。如:

    class Student
    {
    public :
        void display()
        {
            cout<<"num:"<<num<<endl;cout<<"name:"
            <<name<<endl;cout<<"sex:"<<sex<<endl;
        }
    private :
        int num;
        string name;
        char sex;
    };

    其中第4行 void display( )也可以写成 inline void display(),将display函数显式地声明为内置函数。以上两种写法是等效的。对在类体内定义的函数,一般都省写inline。应该注意的是,如果成员函数不在类体内定义,而在类体外定义,系统并不把它默认为内置(inline)函数,调用这些成员函数的过程和调用一般函数的过程是相同的。如果想将这些成员函数指定为内置函数,应当用inline作显式声明。如:

    class Student
    {
        public : inline void display( );//声明此成员函数为内置函数
        private :
        int num;
        string name;
        char sex;
    };
    
    inline void Student::display( ) // 在类外定义display函数为内置函数
    {
        cout<<"num:"<<num<<endl;cout<<"name:"<<name<<endl;cout<<"sex:"<<sex<<endl;
    }

    值得注意的是,如果在类体外定义inline函数,则必须将类定义和成员函数的定义都放在同一个头文件中(或者写在同一个源文件中),否则编译时无法进行置换(将函数代码的拷贝嵌入到函数调用点)。但是这样做,不利于类的接口与类的实现分离,不利于信息隐蔽。虽然程序的执行效率提高了,但从软件工程质量的角度来看,这样做并不是好的办法。只有在类外定义的成员函数规模很小而调用频率较高时,才将此成员函数指定为内置函数。

    展开全文
  • C++之在类外定义成员函数

    千次阅读 2018-05-11 10:27:13
    #include &lt;iostream&gt;using namespace std;class Student{public: void get(); void display();private: int age; string name;};void Student::get(){ cin&...}void Student::display(){ ...
    #include <iostream>
    


    using namespace std;


    class Student
    {
    public:
    void get();
    void display();
    private:
    int age;
    string name;
    };


    void Student::get()
    {
    cin>>age>>name;
    }


    void Student::display()
    {
    cout<<"age:"<<age<<endl;
    cout<<"name:"<<name<<endl;
    }


    int main()
    {
    Student stud;
    stud.get();
    stud.display();


    return 0;
    }
    展开全文
  • 类外定义成员函数

    千次阅读 2017-10-18 17:26:11
    //1、类外定义成员函数 class Student { public: void display();//公用成员函数声明 private: int num; char name[20]; char sex; }; void Student::display()//类外定义display函数,“::”是作用域...
    //1、类外定义成员函数
    
    class Student
    {
    public:
    void display();//公用成员函数声明
    private:
    int num;
    char name[20];
    char sex;
    };
    void Student::display()//类外定义display函数,“::”是作用域运算符,在类外要加类名,不然就是全局函数
    {
    cout << "num:" << num << endl;//类函数必须先在“类体”中作“原型声明”,然后在“类外定义”
    cout << "name:" << name << endl;//“类体位置”要在“函数定义”之前
    cout << "sex:" << sex << endl;
    }
    Student stud1, stud2;


    //2、内置成员函数
    //一般来说:调用函数时间>小规模函数体内语句执行时间,时间开销比较大。
    class Student
    {
    public:
    inline void display();//声明此成员函数为内置函数
    private:
    int num;
    char name[20];
    char sex;
    };
    inline void Student::display()//在类外定义display函数为内置函数
    {
    cout << "num:" << num << endl;
    cout << "name:" << name << endl;//内置函数一般无循环等控制结构
    cout << "sex:" << sex << endl;
    }


    //3、成员函数存储方式
    //(1)不论成员函数在类内还是类外定义,成员函数的代码段都不占对象的存储空间
    //(2)不要与inline混淆,用不用inline,都不占存储空间,inline只影响程序的执行效率
    //(3)虽然成员函数并没有放在对象的存储空间中,但从逻辑角度,成员函数是和数据封装在一个对象中的
    展开全文
  • C++中在类外部定义成员函数

    千次阅读 2020-10-14 10:22:21
    1 外部定义成员函数 代码如下所示 classMyClass{ voidmyFunc(); inti; }; voidMyClass::myFunc() { i = 1; } 此时MyClass的成员函数myFunc()MyClass之外定义。虽然myFunc()函数看上去没有在类的作用...
  • 成员函数(简称函数)是函数的一种,它的用法和作用和前面介绍过的函数基本上是一样的,它也有返回值和函数类型,它与一般函数的区别只是:它是属于一个的成员,出现在类体中。它可以被指定为private(私有的...
  • C++中模板中的成员函数以及模板函数在类外定义

    千次阅读 多人点赞 2020-03-05 18:45:07
    但是模板里的成员函数和模板函数与普通的成员函数在类外定义不同。 先定义一个模板以及成员函数和模板函数: 接下我们就在类外定义函数: 1.构造函数 2.成员函数 3.模板函数 以上就是模板中的成员函数以及...
  • 今天清理手机微信没用的数据【惊人啊,删了1G+的图...回忆了一下,当时讨论的是:为啥成员函数在类外定义时,函数名不能加static?       class Point { public: void init() { } static void o...
  • #include using namespace std;class Time{private:int hour;int minute;int sec;public:void sl();void sc();};void Time::sl(){cin>>hour;cin>>minute;cin>>sec;...void Time::sc(){cout<<hour<<":"<<minute<<":"<<
  • 例如私有的成员函数只能被本中的其它成员函数所调用,而不能被类外调用。成员函数可以访问本中任何成员(包括私有的和公用的),可以引用本作用域中有效的数据。 一般的做法是将需要被外界调用的成员函数指定为...
  • {//函数定义体 } 说明: template是一个声明模板的关键字,表示声明一个模板关键字class不能省略,如果类型形参多余一个 ,每个形参前都要加class 可以包含基本数据类型可以包含类型。 请看以下程序: ...
  • 今天学习一下成员函数,首先讲一下常规的类外的函数 写在类的外部的函数叫做全局函数,不属于任何的。 如果写在类的里面就叫做成员函数 int sum(int x, int y)//写在类的外部 { return x + y; } class ...
  • 的数据成员说明对象的特征,而成员函数决定对象的操作行为。 的成员函数有两种定义方法:外联...在类外定义成员函数时必须函数名之前缀上类名,函数名和类名之间加上作用域区分符::,作用域区分符::指明一...
  • C++之定义成员函数

    千次阅读 2018-05-11 09:58:52
    #include &lt;iostream&gt;using namespace std;class Student{public: void get() { cin&gt;&gt;age&gt;&gt;name; } void display() { cout&lt;&lt;"..."
  • 习题 9.12 将例9.14改写为在类模板外定义成员函数。 代码块: #include &lt;iostream&gt; using namespace std; template &lt;class numtype&gt; class Compare { public: Compare(numtype a...
  • 2、每个成员函数在模板外定义的时候前面都要有模板的声明,注意是每个。 #include&lt;iostream&gt; using namespace std; template&lt;class numtype&gt; //模板声明 class compare { public:...
  • 4.如何定义以及访问的方式与普通成员变量和普通成员函数的区别? 5.是怎么分配内存的? 当调用一个对象的非静态成员函数时,系统会把该对象的起始地址赋给成员函数的this指针。而静态成员函数并不属于某一对象(所有...
  • c++中在类外定义函数

    万次阅读 2017-01-09 15:31:48
    c++中有时候中的成员函数过长,那么此时在类定义成员函数就不利于程序的阅读了,此时我们大都会将是函数定义在类外。  c++中规定,在类外定义成员函数时要用类名和作用域运算符进行限定。  如程序:...
  • C++在类的外部定义构造函数

    千次阅读 2020-08-08 18:18:47
    #include<iostream> using namesapce std; int main(void) { class A { public: ...//在类内声明构造函数在类的外面定义构造函数, //这种方式有的编译器能通过,有的编译器不能通过 ...
  • 静态成员函数定义

    千次阅读 2017-11-16 11:37:15
    静态成员函数定义
  • C++:成员函数定义方式

    千次阅读 2017-09-07 10:08:00
    1、成员函数的第一种定义方式:在类声明中只给出成员函数的原型,而将成员函数定义放在的外部。返回值类型 类名::成员函数名(参数表){ 函数体} class Point{ public: void setpoint(int,int); //设置坐标...
  • c++在类外调用的私有成员函数的两种方法

    万次阅读 多人点赞 2018-08-02 20:03:50
    1.通过的public成员函数调用private成员函数: #include&lt;iostream&gt; using namespace std; class Test { public: void fun2() { fun1(); } private: void fun1() ...
  • c++的几种成员函数声明后必须要定义吗? 1. 构造函数和析构函数 test.h #pragma once class CTest { public: CTest(); ~CTest(); }; test.cpp #include "stdafx.h" #include "test.h" 情况一: main.cpp #...
  • 定义成员函数是内联函数

    千次阅读 2017-06-13 08:43:58
    之前看书的时候没有注意到这点,今天再翻primer发现了这句话,感觉好神奇,...在类定义成员函数默认为inline,不论前面是否加了inline,当然,是否内联还是取决于编译器啦~而在类外定义成员函数就不是内联函数。
  • 关于C++头文件中定义成员函数

    千次阅读 2018-03-09 15:28:29
    对于Java来说,class文件中包含了成员函数定义,但是,对于C++来说,一般将成员函数的声明放在头文件,而将其实现放在.cpp里面,那么头文件中写成员函数的具体实现是否可以呢?The C++ ISO standard says:"...
  • 今天写STL中 rb_tree 的时候意外的发现一个问题:模板的模板成员函数不能在类定义外部进行特化,特化必须放在类定义内,否则将报错:error C2244: “X::test”: 无法将函数定义与现有的声明匹配 经过写如下的...
  • 我们知道,的常成员函数尾部加了const关键字,而且,声明和定义处必须都加const关键字。 举个例子说明: //a.h class A { public: A(){} ~A(){} void display() const; }; //a.cpp #include "a.h" ...
  • 成员函数定义

    千次阅读 2020-05-06 17:03:55
    成员函数定义 如上所述, 中含有两种成份,即数据成员和成员函数, 其中成员函数也称方法。实际上,成员函数和方法指的是...第一种方式是在类声明中只给出成员函数的原型, 而成员函数在类的外部定义。这种成员函数...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 819,260
精华内容 327,704
关键字:

怎么在类外定义成员函数