精华内容
下载资源
问答
  • 类中的常成员函数的使用和定义

    千次阅读 2018-06-16 16:35:01
    如果只对对象进行读操作,...常成员函数的声明和定义在形式上必须一致,即在函数形参列表的右括号后面加上const。//---------main.cpp------------ #include <iostream> using namespace std; ...

    如果只对对象进行读操作,则该成员函数可以设计成常成员函数。设计成常成员函数的好处是:让使用者一目了然地知道该成员函数不会改变对象的值

    常成员函数的声明和定义在形式上必须一致,即在函数形参列表的右括号后面加上const。

    //---------main.cpp------------  
    #include <iostream>  
      
    using namespace std;  
      
    class Date  
    {  
    public:  
        int year,month,day;  
    public:  
        void set(int y,int m ,int d)  
        {  
            year  = y;  
            month = m;  
            day   = d;  
        }  
        bool isLeapYeay()const;  
        void print()const;  
    };  
      
    bool Date::isLeapYeay()const  
    {  
        return (((year%4 == 0)&&(year%100 != 0))||(year%400 ==0));  
    }  
    inline void Date::print()const  
    {  
      
        std::cout<<year<<"/"<<month<<"/"<<day<<" is a leap year!"<<endl;  
    }  
      
    int main(int argc,char **argv)  
    {  
        //-----------------对象----------------  
        Date s;  
        s.set(2015,9,25);  
        if(s.isLeapYeay()) s.print();  
        else  
            std::cout<<s.year<<"/"<<s.month<<"/"<<s.day<<" is not a leap year!"<<endl;  
        return 0;  
    }  
    其中set成员函数因为要修改对象值,所以无法设计成const。这样,只有s.set(xxxx,xx,xx);的行为会改变对象的值,而s.isLeapYear()的操作肯定不会改变对象的值。否则编译不通过。
    展开全文
  • 我们知道,类的常成员函数尾部加了const关键字,而且,声明和定义处必须都加const关键字。 举个例子说明: //a.h class A { public: A(){} ~A(){} void display() const; }; //a.cpp #include "a.h" ...

    我们知道,类的常成员函数 尾部 加了 const 关键字,而且,声明 和 定义处 必须 都加 const 关键字。

    举个例子说明:

    //a.h

    class A

    {

    public: 

           A(){}

           ~A(){}

          void display() const;

    };

    //a.cpp

    #include "a.h"

    #include <iostream>

    void A::display() const

    {

         std::cout << "haha" << "\n";

    }

    此文,主要说明 为什么声明 和 定义处必须 都加的问题,其他若有看不懂的地方,建议多翻翻书。

    答: 我们知道,函数的声明 和 定义 必须匹配,而 如下两个函数是 2个 不同的函数,

             举例:

                        void display();

                        void display() const;

             若在 类的 成员函数 声明处 尾部加了 const,为了匹配, 类外定义处也必须加 const 关键字!!!

     

    总结: 这个问题的回答,一句话,为了函数匹配,所以,两处都加 const(常成员函数),或者 两处都不加const(非常成员函数)。

     

     

     

    展开全文
  • C++ 常成员函数

    千次阅读 2017-04-26 09:29:26
    C++ 常成员函数

        常常把对象的成员函数分为两类:修改对象状态的成员函数、获取对象状态的成员函数。

        常成员函数就是一种获取对象状态的成员函数,并且不能改变对象的状态(也就是不能修改对象的成员的值)。

        形式:

    class A
    { ...
       void f() const {...}
    }

        或

    class A
    {...
        void f() const;//声明
    }
    void A::f() const //定义
    {
        ...
    }	

        当时要注意下面两个例子:

        

    class A
    {
        int x;
        char *p;
      public:
        ...
        void f() const
        {
            x=10; //Error
            p = new char[20]; //Error
        }
    }
        
    class A
    {
        int x;
        char *p;
      public:
        ...
        void f() const
        {
            strcpy(p,"abc");//没有改变p的值,因此编译程序认为OK
            *p = 'A';//同上
        }
    }

        这样的问题就需要程序设计者自己来把握了!!!


    展开全文
  • 也可以在类体中只写成员函数的声明,而在类的外面进行函数定义。如: class Student { public : void display( ); //公用成员函数原型声明 private : int num; string name; char sex; //以上3行是私有数据...

    在类外定义成员函数

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

    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行的函数,一般在类体内声明,在类外定义。

     

    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;
    };

    其中第3

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

    展开全文
  • C++:类的成员函数定义方式

    千次阅读 2017-09-07 10:08:00
    1、成员函数的第一种定义方式:在类声明中只给出成员函数的原型,而将成员函数定义放在类的外部。返回值类型 类名::成员函数名(参数表){ 函数体} class Point{ public: void setpoint(int,int); //设置坐标...
  • 常成员函数中,你不能改变数据成员的值,你也不能在常成员函数中调用非常量成员函数,因为你不确定你调用的那个非常量成员函数是否改变了数据成员的值,如果改变了,那就相当于在常成员函数里改变了数据成员,与...
  • 1 常成员函数 1.1声明:函数名(形参列表)const; 1.2说明: 1)const是函数类型的一部分,在实现部分也要带上该关键字; 2)const关键字可以用于对重载函数的区分; 3)常成员函数不能更新类的成员变量,也不...
  • c++对象和常成员函数详解

    千次阅读 2017-07-15 21:52:19
    对象对象是指该对象在其生命周期内,其所有的数据成员的值都不能被改变;定义对象时加上关键字const,该对象就是...1. 对象只能调用常成员函数,不能调用普通成员函数 (除了隐式调用析构函数和构造函数),成员
  • 常成员函数

    千次阅读 2010-05-28 11:13:00
    常成员函数 使用const关键字进行说明的成员函数,称为常成员函数。只有常成员函数才有资格操作常量或对象,没有使用const关键字说明的成员函数不能用来操作对象。常成员函数说明格式如下: () const; 其中,...
  • 类的成员函数(简称类函数)是函数的一种,它的用法和作用和前面介绍过的函数基本上是一样的,它也有返回值和函数类型,它与一般函数的区别只是:它是属于一个类的成员,出现在类体中。它可以被指定为private(私有的...
  • 类声明和成员函数定义的分离

    千次阅读 2015-10-12 21:06:59
    为了实现类的隐蔽性,对类成员函数的定义一般不放在头文件中,而放在另一个文件中,即类声明和函数定义是分别放在两个文件中的。 实际上一个C++程序是由3个部分组成的:类声明头文件(后缀为.h);类实现文件(后缀...
  • 类静态成员函数定义

    千次阅读 2017-11-16 11:37:15
    类静态成员函数定义
  • 1. 运算符重载定义为类成员函数 2. 运算符重载定义为非成员函数
  • 【C++】 对象、数据成员、常成员函数总结

    千次阅读 多人点赞 2019-03-24 15:07:25
     ◆ 数据成员不能在声明时赋初始值(普通数据成员也是),数据成员必须在构造函数初始化列表进行初始化;普通数据成员在初始化列表和函数体中初始化均可。  ◆ PS:类的成员对象若要传入参数初始化,则必须在...
  • 引用 形式—— const 类型 &对象名或变量名 ②对象 ...3.对象可以调用静态成员函数常成员函数,其实也可以调友元函数 (但是这里不对每一个具体展开了,就只是为了更加明白对象是不
  • 成员变量、常成员函数对象

    千次阅读 2013-03-14 12:56:38
    成员变量是用关键字const来声明成员变量, const位于变量前或类型前都一样。 使用特点: (1)成员变量只能通过构造函数的初始化表对成员变量进行初始...常成员函数: 用const来修饰的成员函数 ,const位于函数的括
  • C++类的数据成员和常成员函数

    千次阅读 2019-03-11 11:01:07
    一、数据成员 1、定义 用const修饰的数据成员 const int hour;//定义const为数据成员 ...不能采用在构造函数中对数据成员进行赋初值的方法,因为数据成员是不能被赋值的。...普通成员函数...
  • 成员函数定义static变量

    千次阅读 2014-11-11 15:21:15
    成员函数定义static变量
  • 今天编写数组链表的程序,出现了一个问题,我在ArrayList.h中定义了一个模板类ArrayList,然后按照原来的习惯,在另一个源文件ArrayList.cpp中对模板类的成员函数进行定义,编译也通过了,但是当我在main函数对模板...
  • 例如私有的成员函数只能被本类中的其它成员函数所调用,而不能被类外调用。成员函数可以访问本类中任何成员(包括私有的和公用的),可以引用在本作用域中有效的数据。 一般的做法是将需要被外界调用的成员函数指定为...
  • 类的数据成员必须进行初始化,而且只能通过构造函数的成员初始化列表的方式来进行。列表中对成员的初始化顺序...类的常成员函数声明格式如下: 函数类型 成员函数名(参数列表) const; 修饰符 const要加在函数说明
  • C++中在类外部定义成员函数

    千次阅读 2020-10-14 10:22:21
    类的成员函数可以在类内部定义,也可以在类的外部定义。当定义在类的外部时,需要同时提供类名和函数名。 1 类外部定义成员函数 代码如下所示 classMyClass{ voidmyFunc(); inti; }; voidMyClass::myFunc() { ...
  • 用const修饰的声明数据成员称为数据成员用const修饰的声明成员函数称为常成员函数用const修饰的定义对象称为对象变量或对象被const修饰后其值不能被更新。因此被const修饰的变量或对象必须要进行初始化。(一)...
  • 试编写一个栈的类模板(包括其成员函数定义),以便为任何类型的对象提供栈结构数据的操作。操作至少包括:入栈和出栈操作。#include &lt;iostream&gt; using namespace std; const int depth=100; ...
  • 外联定义成员函数是指在类定义体中声明成员函数,而在类定义体外定义成员函数。在类中声明成员函数时,它所带的函数参数可以只指出其类型,而省略参数名;在类外定义成员函数时必须在函数名之前缀上类名,在函数名和...
  • 内联函数、构造函数、静态成员函数不可以定义为虚函数 内联函数是编译时展开函数体,所以...如果构造函数定义为虚函数,则需要通过查找虚函数表来进行调用。但是构造函数是虚函数的情况下是找不到的,因为构造函数...
  • 1.类是自定义的数据类型.类与应用程序不同,类的功能虽然独立,但...对象包含有member variables(成员变量)和member functions(成员函数). class Date{ int year, month, day; public: void set(int y,int m,int d);

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 763,061
精华内容 305,224
关键字:

常成员函数的定义