精华内容
下载资源
问答
  • 【C++】 常对象常数据成员成员函数总结

    千次阅读 多人点赞 2019-03-24 15:07:25
    常数据成员  ◆ 常数据成员必须进行初始化,并且不能被更新。  ◆ 常数据成员不能在声明时赋初始值(普通数据成员也是),常数据成员必须在构造函数初始化列表进行初始化;普通数据成员在初始化列表和函数体中初始...
    常数据成员

     ◆ 常数据成员必须进行初始化,并且不能被更新。

     ◆ 常数据成员不能在声明时赋初始值(普通数据成员也是),常数据成员必须在构造函数初始化列表进行初始化;普通数据成员在初始化列表和函数体中初始化均可。

     ◆ PS:类的成员对象若要传入参数初始化,则必须在构造函数初始化列表进行;(成员对象:当一个类的成员是另一个类的对象时,这个对象就叫成员对象。)

    常对象

     ◆ ⭐常对象可以调用常成员函数,不能调用非const成员函数;非const对象,可以调用普通成员函数和常成员函数。

     ◆ 常对象的成员函数不一定都是常成员函数;同样的常对象的数据成员不一定都是常数据成员。

     ◆ 常对象一旦初始化,常对象的数据成员便不允许修改,而不是说常对象的数据成员都是常数据成员。

     ◆ PS:定义常对象有两种方法,1. Point const a; 2. const Point a;(同样的,定义变量或指针时,const放前放后意义一样,如:1. const double a; double const a; 2. const int *p; int const *p; 但是定义指针常量时,只能用 int * const p;)

    常成员函数

     ◆ 常成员函数不更新对象的数据成员。

     ◆ 常成员函数的const关键字可以被用于参与对重载函数的区分。

     ◆ ⭐通常非const成员函数需要定义一个const版本的重载函数,以方便定义常对象后调用常成员函数。
      ◈ 如果常对象调用的常成员函数返回的是指向当前对象的指针(或返回的是当前对象),那么此常成员函数的声明的返回类型要加const,例如:

        ◊ 成员函数返回指向当前对象的指针
          const *Point fun1();    //非const成员函数的类内声明;
          const *Point fun1() const; //习惯上要再声明一个常成员函数作重载函数,注意到此函数声明有两个const;

        ◊ 成员函数返回指向当前对象
          const Point fun1();    //非const成员函数的类内声明;
          const Point fun1() const; //习惯上要再声明一个常成员函数作重载函数,注意到此函数声明有两个const;

        ◊ ⭐注意,如果一个类中声明以下4个重载函数:
          ① Point fun1();
          ② const Point fun1();
          ③ Point fun1() const;
          ④ const Point fun1() const;
         【解析】①和②是冲突的,因为无法区分仅按返回类型区分的重载函数;③和④是冲突的,也是因为无法区分仅按返回类型区分的重载函数。
         所以正确的重载函数搭配有3种:

          ◊ ①和③搭配:
            Point fun1();             //函数返回非const对象
            Point fun1() const;          //函数返回非const对象
           [解析]适用于定义常对象后调用常成员函数,常成员函数返回类型是非const的Point类对象。

          ◊ ①和④搭配(这里把返回类型改为指针,因为常用):
            Point *fun1() {return this; };      //函数返回指向本对象的指针
            const Point *fun1() const { return this; };//函数返回指向本常对象的指针,第一个const说明返回的是指向常对象的指针,第二个const说明此函数是常函数

           [解析]适用于定义常对象后调用常成员函数,常成员函数返回类型是常Point类对象(如return *this;)。

          ◊ ②和④搭配:
            const Point fun1();          //函数返回常对象
            const Point fun1() const;       //函数返回常对象
           [解析]适用于定义常对象后调用常成员函数,常成员函数返回类型是常Point类对象。

           ②和③搭配:
            const Point fun1();
            Point fun1() const;
           [解析]虽然搭配合法,但是似乎不存在这种搭配。

    展开全文
  • 2.对象不能够调用普通成员函数——因为普通成员函数可能会修改对象数据类型,这是不安全的。 3.对象可以调用静态成员函数,常成员函数,其实也可以调友元函数 (但是这里不对每一个具体展开了,就只是为了...

    ①常引用

    形式—— const 类型 &对象名或变量名

    ②常对象

    形式——const 类名 对象名

    1.常对象的数据成员不能被修改了,在定义的时候应该对其进行初始化

    2.常对象不能够调用普通成员函数——因为普通成员函数可能会修改对象的数据类型,这是不安全的。

    3.常对象可以调用静态成员函数,常成员函数,其实也可以调友元函数  (但是这里不对每一个具体展开了,就只是为了更加明白常对象是不能调用普通的成员函数的即可)

    ③常成员函数

    形式——返回值类型 方法名(参数表)

    1.常成员函数不能改变对象的值,也不能在函数体里面调非常成员函数。

    2.常对象可以调常成员函数和静态成员函数

    3.常成员函数实现的时候,函数头是应该和声明的函数头一致的,const也是函数类型的一个组成部分,而对于友元函数和静态成员函数是不用friend和static的

    4.非常对象也可以调用常成员函数,但是当常成员函数与非常成员函数同名的时候(可以视为函数重载),对于非常对象是会优先调用非常成员函数的。

    ④常数据成员

    形式——const 数据类型 变量名;

            (当同时还是静态数据成员的时候)static const 数据类型 变量名;

    1.常数据成员的初始化只能通过构造函数的列表来完成

    
    class CPoint
    {
    public:
    	CPoint(int xx, int yy,int zz);
    private:
    	int x,y;
    	const int z;
    };
    CPoint::CPoint(int xx, int yy, int zz) :z(zz)
    {
    	x = xx;
    	y = yy;
    	//z = zz;     这个是不被允许的,因为会报赋值号左侧必须是可修改的左值(可修改,有数据存储空间)
    }

    2.但是静态的常数据成员必须在类外进行初始化,不能在构造函数中进行,并且const不能省

    class CPoint
    {
    public:
    	CPoint(int xx, int yy,int zz);
    private:
    	int x,y;
    	static const int z;
    };
    const int z = 10;  //const不能省,也是类型的一部分
    3.如果类有多个重载构造函数,就应该在每一个重载构造函数的初始化列表中去初始化常数据成员,当然刚才说的2.除外。


    展开全文
  • 一:对象:Time const t1...但如果一定要修改常对象数据成员的值,可以将该数据成员声明为mutable,如: mutable int count;//把count声明为可变的数据成员,这样就可以用生命为const的成员函数改变它的值。 二:

    一:常对象:Time const t1(12,23,23);

    其中所有的值不能被修改。通过该对象只能调用它的常成员函数,而不能调用它的普通成员函数。以防普通成员函数会修改数据成员的值。但如果一定要修改常对象数据成员的值,可以将该数据成员声明为mutable,如:

    mutable int count;//把count声明为可变的数据成员,这样就可以用生命为const的成员函数改变它的值。

    二:常数据成员:

    只能通过其构造函数的参数初始化列表对常数据成员进行初始化。

    三:常成员函数:

    只能引用本类中的成员,而不能修改它们的值。一般格式为:void get_time() const;

    在声明和定义时必须要有const关键字,在调用时可以不加const关键字。

    四:指向对象的常指针:

    Time *const p1=&t1;

    五:指向常对象的指针变量:

    const Time * p=&t1;

    这两个的用法与常量指针和指针常量的用法是类似的。

    注意:如果一个对象已被声明为常对象,只能用指向常对象的指针变量指向它,而不能用指向非const型对象的指针变量指向它。

               当希望在调用函数时对象的值不被修改,就应该把形参定义为指向常对象的指针变量,同时用对象的地址做实参。

    当直接用对象名作为形参和实参时,在函数中修改形参的值,但不会改变实参的值。

    在C++面向对象设计中,经常用常指针和常引用做函数参数,可以保证数据安全并能节省空间。

    展开全文
  • C++中的常对象常对象成员

    千次阅读 2013-09-05 23:53:00
    常对象 ...这样的话,在所有的场合中,对象t1中的所有数据成员的值都不能被修改。凡希望保证数据成员不被改变的对象,可以声明为常对象。 定义常对象的一般形式为 类名 const 对象名(实参列表); 也可以把

    常对象

    常对象必须在定义对象时就指定对象为常对象。

    常对象中的数据成员为常变量且必须要有初始值,如

    Time const t1(12,34,36); //定义t1为常对象


    这样的话,在所有的场合中,对象t1中的所有数据成员的值都不能被修改。凡希望保证数据成员不被改变的对象,可以声明为常对象。

    定义常对象的一般形式为

    类名    const    对象名(实参列表);

    也可以把const写在最左面

    const    类名    对象名(实参列表);

    二者等价

    如果一个对象被声明为常对象,则不能调用该对象的非const型的成员函数(除了由系统自动调用的隐式构造函数和析构函数)。

    否则就会报错


    这样做是为了方式非const型的成员函数修改常对象中的数据成员的值,因为const型的成员函数是不可以修改对象中的数据成员的值的(这个后面还会说到)。

    那么,怎样才能引用常变量中的数据成员呢?很简单,我们只需要将该成员函数声明称const型的成员函数(常成员函数)即可。

    void Print() const;

    常成员函数可以访问常对象中的数据成员,但仍然不允许修改常对象中数据成员的值。

    有时在编程时有要求,一定要修改常对象成员中的某个数据成员的值(例如类中有一个用于计数的变量count,其值应当不能变化),

    对该数据成员声明为mutable,如

    mutable int count;//定义一个在常对象中可以被改变的数据成员
    把count声明为可变的数据成员,这样就可以用声明为const的成员函数来修改它的值。

    =========================一个简单的示例程序1.1====================================

    #include<iostream>
    using namespace std;
    class Student
    {
    	public:
    		Student(int n,float s):num(n),score(s){}
    		void change(int n,float s) const{num=n;score=s;}
    		void display() const{cout<<num<<"\t"<<score<<endl;}
    	private:
    		mutable int num;
    		mutable float score;
    } ;
    int main()
    {
    	Student const stud(101,78.5);
    	stud.display();
    	stud.change(101,80.5);
    	stud.display();
    	return 0;
    } 
    



    我们定义了常对象stud,然后分别调用了两个常函数display()和change(),但是在change函数中要修改常对象中的num和score的值,所以我们将num和score定义为mutable.

    常对象成员


    1.常数据成员

    其作用和用法与一般常变量相似,用关键字const来声明常数据成员。常数据成员的值是不能改变的。
    只能通过构造函数的参数初始化表对常数据成员进行初始化。

    在类体中声明常数据成员
    const int num;//声明hour为常数据成员

    在类外定义构造函数
    Student::Student(int n,float s):num(n),score(s){} //通过参数初始化表对常数据成员num和score初始化

    在类体中声明了某一个数据成员为常数据成员后,该类所有对象中的该数据成员的值都是不能改变的,但不同对象中该变量成员的值可以是不同的(分别在初始化时指定)。

    2.常成员函数


    如果将成员函数声明为常成员函数,则只能引用本类中的数据成员,而不能修改它们。
    注意:常对象只能引用常成员函数

    常成员函数的定义形式:
    void Print() const;//注意const的位置在函数名和括号之后
    const是函数类型的一部分,在声明函数和定义函数都要有const关键字,在调用时不必加const。
    常成员函数可以const数据成员,也可以引用非const数据成员,但是都不能修改他们;
    不是常成员函数的函数可以调用const数据成员,但是不能修改它们,也可以调用非const数据成员,并且可以修改它们。
    具体情况,如图1:



    还要注意一下三点:
    1.不要误认为常对象中的成员函数都是常成员函数,常对象只保证其所有数据成员的值不被修改。
    2.如果在常对象中的成员函数未加const声明,则编译系统会把它当最非const成员函数处理。
    3.还要注意,常成员函数不能调用另外一个非cosnt成员函数。
    展开全文
  • 一旦声明可常对象那么常对象中的所有数据成员的值都不能被修改。所以希望保证数据成员的不被改变的对象,我们都可将其声明为常对象。 定义常对象的格式:类名 const 对象名(实参列表){}  或const 类名 对象名(实参...
  • C++ 常数据成员成员函数和常对象

    千次阅读 多人点赞 2019-01-04 23:54:51
    首先给出一个例子简单理解const修饰数据变量的基本工作原理: #include &lt;stdio.h&gt; int main() { const int a = 250; int *ptr = (int *)&amp;a; *ptr = 360; printf("*ptr = %d\n&...
  • C++常对象及其成员

    千次阅读 2014-12-11 13:38:38
    C++虽然采取了不少有效的措施(如设private保护)以...既要使数据能在一定范围内共享,又要保证它不被任意修改,这时可以使用const,即把有关的数据定义为常量。 常对象 在定义对象时指定对象常对象常对象必须要有
  • c++常对象常成员函数详解

    千次阅读 2017-07-15 21:52:19
    常对象常对象是指该对象在其生命周期内,其所有的数据成员的值都不能被改变;定义对象时加上关键字const,该对象就是常对象,其一般形式如下:类名 const 对象名[(实参类别)]; 或者 const 类名 对象名[(实参类别)...
  • C++类中的常数据成员和静态数据成员的区别

    千次阅读 多人点赞 2013-09-20 01:19:26
    刚开始学习C++的类和对象的部分,对类中的常数据成员和静态数据成员的概念和用法经常混淆,所以今天整理一下,顺便说一下,今天是我的生日,祝我生日快乐,呵呵。 常数据成员 常数据成员是指在类中定义的不能修改其...
  • 3、静态常成员变量(基本数据类型) 4、静态常成员变量(自定义数据类型) 二、常成员变量 C++中使用const关键字修饰的成员变量就是常成员变量,有两种定义方式: const int c; int const c; 需要注意的是:...
  • 在定义对象时加关键字const,指定对象常对象常对象必须要有初值,定义后就不可修改。Time const t1(10, 20, 30);//定义t1是常对象 const Time t1(10, 20, 30);//等价说明:(1)如果一个对象被声明为常对象,则...
  • 常对象说明:常对象是指对象数据成员的值在对象被调用时不能被改变。常对象必须进行初始化,且不能被更新。不能通过常对象调用普通成员函数,但是可以通过普通对象调用成员函数。常对象只能调用成员函数。...
  • C++ 常对象常成员函数

    千次阅读 2016-10-03 09:46:52
    常对象:不能修改对象。“只读”。使用const声明,声明时必须初始化。 格式: const 类名 对象名 (初始...只能访问数据成员而不能设置或修改数据成员。 返回类型 函数名 (形参表)const; const成员函数只能调用c
  • C++类的常数据成员成员函数

    千次阅读 2019-03-11 11:01:07
    一、常数据成员 1、定义 用const修饰的数据成员 const int hour;//定义const为常数据成员 2、初始化 不能采用在构造函数中对常数据成员进行赋初值的方法,因为常数据成员是不能被赋值的。 构造函数只能用...
  • c++ 常成员函数 和 常对象

    千次阅读 多人点赞 2014-06-17 13:30:17
    先明确几个概念: 1. 常对象只能调用常成员函数。 2. 普通对象可以调用全部成员函数。
  • 类的常数据成员必须进行初始化,而且只能通过构造函数的...在对象被创建以后,其常数据成员的 值不允许被修改。 类的成员函数声明格式如下: 函数类型 成员函数名(参数列表) const; 修饰符 const要加在函数说明
  • 1.常成员变量:常成员变量是用关键字const来声明的变量,const位于变量前或者类型前都一样,用const修饰的变量只能初始化一次,以后都用这个值。。class Time{ public:const int hour; int const minute; };注明...
  • const修饰数据成员、...const 修饰数据成员、成员函数、类对象 1. const 修饰数据成员:初始化位置可以在参数列表中,新版本也可以在声明位置直接初始化 被const修饰的数据成员,不能被修改 2. const 修饰成员函...
  • 当我们定义的数据或对象不能改变时,我们就要将其声明为常量。主要有引用、常对象对象指针、常数组、指针等。 1、引用 顾名思义。引用所引用的对象不能更改。...常对象数据成员在它的生存期内不会改变
  • · 用const修饰的声明数据成员称为常数据成员 · 用const修饰的声明成员函数称为成员函数 · 用const修饰的定义对象称为常对象 变量或对象被const修饰后其值不能被更新。因此被const修饰的变量或对象必须要进行...
  • 静态数据成员和静态数据成员函数

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

    千次阅读 2008-09-18 21:13:00
    (1) 常对象用const修饰的对象对象常量,其格式如下:〈类名〉const 〈对象名〉 或者 const 〈类名〉〈对象名〉声明为常对象的同时必须被初始化,并从此不能改写对象数据成员。例:分析下列错误的地方,说明...
  • 常成员函数的对象只是只读访问,不允许修改对象成员变量,所以不能调用非常成员函数,因为,这些成员函数可能修改成员变量。 而普通成员函数当然可以调用常成员函数 class people  { private: char *...
  • 静态数据成员和静态成员函数

    万次阅读 多人点赞 2018-08-26 19:18:35
    c++中的static静态数据成员和静态成员函数应该是让大家比较头疼的东西,好像也是找工作公司面试中常常问到的东西。我自己也深有体会,在学习c++的过程中,总感觉static很烦人,但是又是一个必须懂的东西,所以今天就...
  • 1. 在C++中只有被声明为const的成员函数才能被一个const类对象调用。如果要声明一个const类型的类成员函数,只需要在成员函数列表后加上关键字const, 例如: class Screen { public: char get() const; };在类体...
  • 一般的情况是类中的私有数据成员,只能是类的对象自己可以修改,从外部是不能更改的如下例子 #include using namespace std; class Data { private: int i; public: Data() { i=0; } int* geti() { ...
  • 有关const成员、static成员、const static成员的初始化: 1、const成员:只能在构造函数后的初始化列表中初始化 2、static成员:初始化在类外,且不加static修饰 3、const static成员:类只有唯一一份拷贝,且数值不...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 407,133
精华内容 162,853
关键字:

修改常对象的数据成员