精华内容
下载资源
问答
  • 在类定义成员函数会自动成为内联函数,在类体外定义的不会,若在类体外部定义函数时加入 inline 关键字,会使其成为内联函数。 这种类体外定义inline函数的方式,必须将类的定义和成员函数的定义都放在同一个...

    在C++中,为了解决一些频繁调用的小函数大量消耗栈空间或者栈内存的问题,引入了内联函数。

    在类中定义成员函数会自动成为内联函数,在类体外定义的不会,若在类体外部定义函数时加入 inline 关键字,会使其成为内联函数。

    这种类体外定义inline函数的方式,必须将类的定义和成员函数的定义都放在同一个头文件中(或同一个源文件中),否则编译时无法进行嵌入。

    内联函数一般不是我们所期望的,它会将函数调用处用函数体代替,所以建议在类体内部对成员函数作声明,在类体外部进行定义。

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

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

    类的成员函数(简称类函数)是函数的一种,它的用法和作用和前面介绍过的函数基本上是一样的,它也有返回值和函数类型,它与一般函数的区别只是:它是属于一个类的成员,出现在类体中。它可以被指定为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行的函数,一般在类体内声明,在类外定义。

    展开全文
  • 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函数,“::”是作用域...
  • 题目要求: 在以上程序(第2章习题第2小题)基础上进行修改: 在类体内声明成员函数,在类定义成员函数。 ——谭浩强的《C++面向对象程序设计》第2章习题第3小题
  • 类的成员函数(简称类函数)是函数的一种,它的用法和作用和前面介绍过的函数基本上是一样的,它也有返回值和函数类型,它与一般函数的区别只是:它是属于一个类的成员,出现在类体中。它可以被指定为private(私有的...
  • C++中在类外部定义成员函数

    千次阅读 2020-10-14 10:22:21
    1 类外部定义成员函数 代码如下所示 classMyClass{ voidmyFunc(); inti; }; voidMyClass::myFunc() { i = 1; } 此时类MyClass的成员函数myFunc()在MyClass类之外定义。虽然myFunc()函数看上去没有在类的作用...
  • 成员函数可以访问本中任何成员(包括私有的和公用的),可以引用本作用域中有效的数据。 一般的做法是将需要被外界调用的成员函数指定为public,它们是的对外接口。但应注意,并非要求把所有成员函数都指定为...
  • 友元函数在类中声明 在类外定义,只需去掉friend即可 重载加法运算符也是如此,并且注意重载加法运算符时,ostream算是一种类型名,这里要加&,并且括号里面的形参也是要加&,全部由三个& 至于const加...
  • {//函数定义体 } 说明: template是一个声明模板的关键字,表示声明一个模板关键字class不能省略,如果类型形参多余一个 ,每个形参前都要加class 可以包含基本数据类型可以包含类型。 请看以下程序: ...
  • 定义成员函数是内联函数

    千次阅读 2017-06-13 08:43:58
    之前看书的时候没有注意到这点,今天再翻primer发现了这句话,感觉好神奇,...在类定义成员函数默认为inline,不论前面是否加了inline,当然,是否内联还是取决于编译器啦~而在类定义成员函数就不是内联函数。
  • 函数如下,在C++中声明静态成员变量的时候,在类中只是进行了声明,并没有实际的申请出指针的内存,真正的内存是定义初始化的时候才会进行内存的申请,因此,又因为static类型的变量都是随着类的,因此不能随着对象...
  • 基于其字面提示,错误应该是成员函数应该是没有在类体中声明,而直接在类定义造成的。 由此可能出现下面情况: 在编写类函数实现时出现的1)的情况 1)类内的该成员函数的声明语句或者该成员函数的上一条语句没有...
  • 成员函数定义

    千次阅读 2020-05-06 17:03:55
    成员函数定义 如上所述, 类中含有两种成份,即数据成员和成员函数, 其中成员函数也称方法。实际上,成员函数和方法指的是...第一种方式是在类声明中只给出成员函数的原型, 而成员函数在类的外部定义。这种成员函数...
  • 和对象 构造函数 拷贝构造函数 析构函数 运算符重载 隐含this指针
  • class Weapon //兵器 { private: string _name; //兵器名 int _power; //威力值 public: void show() { cout名字:" ,威力值:" ; }; void setName(string name = "赤手空拳",
  • c++中在类定义函数

    万次阅读 2017-01-09 15:31:48
    c++中有时候类中的成员函数过长,那么此时在类定义成员函数就不利于程序的阅读了,此时我们大都会将是函数定义在类外。  c++中规定,在类定义成员函数时要用类名和作用域运算符进行限定。  如程序:...
  • 外联定义成员函数是指在类定义体中声明成员函数,而在类定义体外定义成员函数在类中声明成员函数时,它所带的函数参数可以只指出其类型,而省略参数名;在类外定义成员函数时必须在函数名之前缀上类名,在函数名和...
  • 成员函数:无论静态函数还是非静态函数,都是属于的(这一点与数据成员的静态非静态不同),对象并不拥有函数的拷贝.两者的区别在于:非静态的函数由对象(加.或指针加->;)调用,这时将向函数传递this指针.而静态函数由...
  • 1 静态数据成员不能用参数初始化表对静态数据成员初始化 (1) 如果声明了类而未定义对象,则类的一般数据成员是不...只要在类中指定了静态数据成员,即使不定义对象,也为静态数据成员分配空间,它可以被引用。 (2)

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,860
精华内容 4,344
关键字:

在类体外定义成员函数