精华内容
下载资源
问答
  • 引言:类存在目的之一就是为了实现封装性,但是实际上经常使用公有函数接口去修改其数据成员,为了保证类中可以有一些数据成员绝对不会被修改,所以创造了常数据成员 特点: 1.在定义时要在头部加const关键字 2....

    常数据成员

    引言:类存在的目的之一就是为了实现封装性,但是实际上经常使用公有函数接口去修改其数据成员,为了保证类中可以有一些数据成员绝对不会被修改,所以创造了常数据成员

    特点:
    1.在定义时要在头部加const关键字
    2.初始化操作只能在构造函数的初始化列表中进行
    3.无论是普通成员函数还是常成员函数都无法修改其值

    常成员函数

    引言:为了实现这样一种函数:对于其调用的数据成员只能读取,而不能修改。所以创造了常成员函数

    特点:
    1.在声明和定义时都要在尾部加const关键字
    2.其只能读取数据成员,而不能修改

    是否可以修改 一般成员函数 常成员函数
    一般数据成员
    常数据成员

    3。常对象只能调用常成员函数

    #include<iostream>
    using namespace std;
    class Point
    {int x,y;
    public:
    Point(int a,int b):x(a),y(b){}
    fun(){return x+y}
    fun()const{return x-y}
    }
    
    void main
    {const Point p1(1,1);
    Point p2(1,1);
    cout<<p1.fun<<endl;
    cout<<p2.fun<<endl;
    
    }
    
    

    注:上面的例子一方面说明了常对象只能调用常成员函数
    另一方面说明了const可以用于区分重载函数

    4.常成员函数只能调用常成员函数,防止误改数据成员

    展开全文
  • [c++]对象的特点

    2016-12-13 17:31:00
    c++中为了保护对象的数据安全,可以采用常...3.常成员函数只能引用本类的常数据成员,且不可改变成员的值。 4.常成员函数不能调用另一个非常成员函数。 转载于:https://www.cnblogs.com/Faiz-room/p/6170806.html...

    c++中为了保护对象的数据安全,可以采用常对象。

    常对象特点:

    1.常成员数据的值无法被修改。

    2.常成员数据必须赋初值。

    3.常成员函数只能引用本类的常数据成员,且不可改变成员的值。

    4.常成员函数不能调用另一个非常成员函数。

    转载于:https://www.cnblogs.com/Faiz-room/p/6170806.html

    展开全文
  • 静态成员 静态成员就是在成员变量和成员函数前加上关键字static,称为静态成员 静态成员分为: 静态成员变量 ... //静态成员变量特点: //1 在编译阶段分配内存 //2 类内声明,类外初始化 //3 所有对象共

    静态成员

    静态成员就是在成员变量和成员函数前加上关键字static,称为静态成员

    静态成员分为:

    • 静态成员变量
      • 所有对象共享同一份数据
      • 在编译阶段分配内存
      • 类内声明,类外初始化
    • 静态成员函数
      • 所有对象共享同一个函数
      • 静态成员函数只能访问静态成员变量

    **示例1 :**静态成员变量

    class Person
    {
    	
    public:
    
    	static int m_A; //静态成员变量
    
    	//静态成员变量特点:
    	//1 在编译阶段分配内存
    	//2 类内声明,类外初始化
    	//3 所有对象共享同一份数据
    
    private:
    	static int m_B; //静态成员变量也是有访问权限的
    };
    int Person::m_A = 10;
    int Person::m_B = 10;
    
    void test01()
    {
    	//静态成员变量两种访问方式
    
    	//1、通过对象
    	Person p1;
    	p1.m_A = 100;
    	cout << "p1.m_A = " << p1.m_A << endl;
    
    	Person p2;
    	p2.m_A = 200;
    	cout << "p1.m_A = " << p1.m_A << endl; //共享同一份数据
    	cout << "p2.m_A = " << p2.m_A << endl;
    
    	//2、通过类名
    	cout << "m_A = " << Person::m_A << endl;
    
    
    	//cout << "m_B = " << Person::m_B << endl; //私有权限访问不到
    }
    
    int main() {
    
    	test01();
    
    	system("pause");
    
    	return 0;
    }
    

    运行结果:
    在这里插入图片描述
    **示例2:**静态成员函数

    class Person
    {
    
    public:
    
    	//静态成员函数特点:
    	//1 程序共享一个函数
    	//2 静态成员函数只能访问静态成员变量
    	
    	static void func()
    	{
    		cout << "func调用" << endl;
    		m_A = 100;
    		//m_B = 100; //错误,不可以访问非静态成员变量
    	}
    
    	static int m_A; //静态成员变量
    	int m_B; // 
    private:
    
    	//静态成员函数也是有访问权限的
    	static void func2()
    	{
    		cout << "func2调用" << endl;
    	}
    };
    int Person::m_A = 10;
    
    
    void test01()
    {
    	//静态成员变量两种访问方式
    
    	//1、通过对象
    	Person p1;
    	p1.func();
    
    	//2、通过类名
    	Person::func();
    
    
    	//Person::func2(); //私有权限访问不到
    }
    
    int main() {
    
    	test01();
    
    	system("pause");
    
    	return 0;
    }
    

    运行结果:
    在这里插入图片描述

    展开全文
  • 函数 C++成员函数用法 在一个普通成员函数后面加上...①可以使用数据成员,不能进行修改,对函数功能有更明确限定;(本类数据成员有“mutable”关键字修饰时可以通过成员函数修改。); ②成员函数...

    常函数

    C++常成员函数用法

    在一个普通成员函数后面加上const修饰,就是常成员函数

    返回值 函数名(形参表)const {函数体}

    注: (函数声明和实现分离时)const是函数声明的一部分,在函数的实现部分也需要加上const


    作用

    特点:

    ①可以使用数据成员,不能进行修改,对函数的功能有更明确的限定;(本类数据成员有“mutable”关键字修饰时可以通过常成员函数修改。);

    ②常成员函数不能用来更新类的任何成员变量,也不能调用类中未用const修饰的成员函数,只能调用常成员函数。即常成员函数不能更改类中的成员状态,这与const语义相符。

    ③常函数能修改传入自身的形参以及内部定义的局部变量;

    ④常函数的this指针是const Class*型;

    ⑤常对象只能调用常函数,不能调用普通函数;

    意义

    在实现只读作用的函数中,可以防止程序员不小心修改了成员变量的值。

    注意

    一、普通成员函数才有常函数。C++中构造函数,静态成员函数,析构函数,全局成员函数都不能是常成员函数。

    构造成员函数的用途是对对象初始化,成员函数主要是用来被对象调用的,如果构造函数被设置成const,就不能更改成员变量,失去了其作为构造函数的意义。

    同理析构函数要释放成员所以也不能声明常函数。

    全局成员函数和静态成员函数static其函数体内部没有this指针,所以也不能是常成员函数

    二、常函数中的this指针是常指针,不能在常成员函数中通过this指针修改成员变量的值

    三、非const对象可以调用常函数,也能调用非常函数。但是常对象只能调用常函数,不能调用非常函数(常对象也包括常指针和常引用)

    四、函数名和形参表相同的常函数和非常函数构成重载关系,此时,常对象调用常函数,非常对象调用非常函数

    静态成员

    一、静态数据成员
    1.静态数据成员定义

    在类中声明静态数据成员很简单,是用static关键字表明即可,在类中只能声明可是不能定义哈!

    要对静态数据成员定义和初始化必须在类的外面也就是在全局作用域中定义,如果定义不给出初值,则默认初值为0(定义时一定要在全局作用域中定义,一定不要在类中定义!)

    另外,不要试图在头文件中定义(初始化)静态数据成员。在大多数的情况下,这样做会引起重复定义这样的错误。

    2.特性
    1. 在类中的静态数据,属于类共享,不属于对象独有

    2. 即使没有定义对象,静态成员也是存在的

    3. 静态数据成员在类中说明,在类外定义并且会给他分配内存空间

    4. 可以通过对象去访问静态成员,但是这里容易让人产生误解,以为他们是成员变量(静态成员是被所有对象共享的,所以也可以去修改它) 我们一般通过 类名::静态成员 去访问它们

    5. 他的生存周期一直存在于整个程序的生命周期

    6.静态数据成员被类的所有对象共享,包括该类的派生类对象,基类对象和派生类对象共享基类的静态数据成员。例子如下:

    class Base{public://静态数据成员static int a;};

    class Derived : public Base{};

    int Base::a;

    #include

    int main()

    {

    Base B;Derived D;

    B.a++;std::cout << B.a << std::endl;D.a++;std::cout << D.a <<std::endl;}

    7.静态数据成员可以作为成员函数的默认形参,而普通数据成员则不可以,直接看例子:

    class Test{

    public:

    static int a;int b;//静态数据成员

    void fun_1(int i = a);//正确

    void fun_2(int i = b);//报错};

    8.静态数据成员的类型可以是所属类的类型,而普通数据成员则不可以。普通数据成员的只能声明为 所属类类型的 指针或引用。

    直接看例子

    class Test{

    public:

    static Test a;//正确 静态数据成员

    Test b;//报错

    Test *pTest;//正确

    Test &m_Test;//正确

    static Test *pStaticObject;//正确};

    9.静态数据成员在const函数中可以修改,而普通的数据成员是不能修改的

    const修饰的时当前this指针所指向的对象是const,但是静态数据成员不属于任何类的对象,它被类的所有对象修改,所以this指针不修饰静态的数据成员,所以可以更改。

    二、静态成员函数

    静态成员函数的声明也很简单,就是在类的成员函数前加上static关键字即可。

    和静态成员一样,静态成员函数也是属于类的,它并不属于任何对象,当调用静态成员函数时应该使用类名和域运算符“∷”,当然也可以使用对象调用操作,但是这样的操作并不意味着静态成员函数属于这个对象,它只是被这个对象共享而已

    特性
    1. 静态成员函数属于一个类,而不属于类中的任何对象

    2. 静态成员函数的说明和定义与静态数据成员一样。函数可以实现在类体内,也可以实现在类体外

    3. 静态成员函数在实现中,可以直接使用静态成员,不能直接访问非静态成员,但是可以通过对象来使用非静态成员(此时非静态成员已经定义)

    4.静态成员函数不能调用非静态成员函数,但是反过来是可以的(因为非静态成员函数只有在类对象建立以后才可以调用)

    5.静态成员函数没有this指针,也就是说静态成员函数不能使用修饰符(也就是函数后面的const关键字)

    6.静态成员函数的地址可用普通函数指针储存,而普通成员函数地址需要用 类成员函数指针来储存。

    类在定义后并不分配存储空间,而是在定义类的对象的时候才分配存储空间,相反静态的数据成员和静态的成员函数是已经在内存中开辟了内存空间了,所以静态数据成员可以独立的访问在任何类对象没有建立起来都可以访问,并且静态成员函数不可以调用非静态成员函数,因为非静态成员函数只有在类对象建立以后才可以调用,相反则是可以的。

    C语言的static和C++static总结

    static在C中的用法,对于C++来说是全盘接受的。两者的不同就在于C++中的类使用。

    c语言中static的语义

    1.static变量:

    1).静态局部变量

    a.静态局部变量在函数内定义,生存期为整个源程序,但作用域与局部变量相同,只能在定义该变量的函数内使用。退出该函数后, 尽管该变量还继续存在,但不能使用它。

    b.对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予0值。而对自动变量不赋初值,则其值是不定的。

    2).静态全局变量

    全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。但是他们的作用域,非静态全局变量的作用域是整个源程序(多个源文件可以共同使用); 而静态全局变量只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。

    2.static函数(也叫内部函数):

    只能被本文件中的函数调用,而不能被同一程序其它文件中的函数调用。

    1. 在C语言中,由于没有类的概念,所以没有静态成员一说,在c中static的作用主要有2个:

    一是隐藏功能,对于static修饰的函数和全局变量而言,其作用于局限于所在的文本,不能被其他文本内的函数使用
    二是保持持久性功能,对于static修饰的局部变量而言,其存储区变更到静态存储区,程序结束不销毁
    并且,因为存放在静态区,全局和局部的static修饰的变量,都默认初始化为0。

    更多精彩内容请关注公众号:同年新月

    展开全文
  • 回顾类中函数成员: class Cstu { public: void print() { cout << "shlimy" << endl; } }; 即在函数名后加const(类型限定符、类型修饰符) 就是函数了 void print() const //函数 { ...
  • Cpp中的常类型

    2020-12-23 14:30:18
    常类型在类中应用2.1 常数据成员2.2 常成员函数 0.常类型、const与符号常量 常类型 用类型修饰符const说明类型,特点是被说明值或对象是不能被更新。因此,定义或说明常类型时必须进行初始化。 符号常量 用...
  • 对象的特点: (1)对象必须进行初始化,而且不能被更新。数据成员同理 (2)对象只能调用类中那些不能改变数据成员值的成员函数(即成员函数),而不能调用类中的其他普通成员函数。 ...
  • C++面向对象考题

    2016-09-24 16:15:15
    public private protected三种继承公有继承的特点是基类的公有成员和保护成员作为派生类的成员时,它们都保持原有的状态,而基类的私有成员仍然是私有的,不能被这个派生类的子类所访问。 私有继承的特点是基类的...
  • C++基础知识(函数)

    万次阅读 2018-08-20 21:19:37
    函数: 形式: void fun() ... 特点:①可以使用数据成员,不能进行修改,对函数功能有更明确限定; ②对象只能调用函数,不能调用普通函数; ③函数this指针是const CStu*. #include<i...
  • 特点:①可以使用数据成员,不能进行修改,对函数功能有更明确限定; ②对象只能调用函数,不能调用普通函数; ③函数this指针是const CStu*. #include<iostream> using namespace std; class...
  • 数据结构-集合

    2014-06-13 08:59:03
    1、集合概念 ...集合有两个重要特点成员是无序、每个成员只在集合中出现一次。使用集合了归类数据。 2、主要应用 数据关联、集合覆盖、集合计算、图、图算法、关系代数 3、集合实现代码
  • 7.2.3 共用体类型数据的特点 7.3 校举类型 7.4 用typedef声明类型 习题 第3篇 基于对象的程序设计 第8章 类和对象 8.1 面向对象程序设计方法概述 8.1.1 什么是面向对象的程序设计 8.1.2 面向对象程序设计的特点 ...
  • 7.2.3 共用体类型数据的特点 7.3 校举类型 7.4 用typedef声明类型 习题 第3篇 基于对象的程序设计 第8章 类和对象 8.1 面向对象程序设计方法概述 8.1.1 什么是面向对象的程序设计 8.1.2 面向对象程序设计的特点 ...
  • 数据结构(C++)有关练习题

    热门讨论 2008-01-02 11:27:18
    e. 如有可能,请建立一个存储商品名称和数量文本文件,并为二叉搜索树建立一个成员函数SetupInventory(),用于从该文本文件中读取库存商品的数据, 实验报告要求: 1、 按要求记录下二叉搜索树完整实验...
  • 在类体中定义的数据、变量和方法称为类的成员, 或称为实例变量和实例方法。 (7) 例如: 下例定义了一个 Point 类 ,并且声明了它两个变量 x、y 坐标 ,同时实现 init()方法 对 x、y 赋初值 。 class Ponit { int...
  • c++ 程序设计

    2019-01-20 22:53:37
    9.1.4 用参数初始化表对数据成员初始化 9.1.5 构造函数的重载 9.1.6 使用默认参数的构造函数 9.2 析构函数 9.3 调用构造函数和析构函数的顺序 9.4 对象数组 9.5 对象指针 9.5.1 指向对象的指针 9.5.2 指向对象成员的...
  • 编程语言相关知识点梳理

    千次阅读 2017-05-03 23:33:20
    2 单例模式的特点是什么用c实现单例模式 3 c中不同数据类型所占用的内存大小 4 编写类String的构造函数 析构函数和赋值函数 5 引用和指针有什么区别 6 c如何连接数据库 7 c模板 8 c中new malloc的区别 9 c中头文件h...
  • 还有用品,大家经常提及品牌,一定会通过社交媒体大放光芒。薛永昱原话是:“你放心,宝洁有一天意识到他重要性之后,一定会做得很好。”就在采访结束第二天,宝洁大中华区总裁施文圣Stevenson开通了他...
  • C++笔试复习

    2019-12-14 18:20:08
    基础知识点 C++中对象数组在定义时候全部进行实例化(与Java不同,Java相当于只是定义了一个指针数组,没有进行实例化) 面向对象程序设计主要有四个特点:...对象只能调用它的常成员函数,不能调用普通函数...
  • Java学习day17-集合框架

    2020-12-22 20:55:23
    集合框架今日目标:1....类的特点:不同类型的成员属性,共同描述一个实体类 集合特点:类型不固定,长度也不固定,随意存放任何数据 2.认识集合框架的继承结构 3.ArrayList 集合没有固定长度:
  • 还有用品,大家经常提及品牌,一定会通过社交媒体大放光芒。薛永昱原话是:“你放心,宝洁有一天意识到他重要性之后,一定会做得很好。”就在采访结束第二天,宝洁大中华区总裁施文圣Stevenson开通了他...
  • BloomFilter 布隆过滤

    2015-08-27 18:46:41
     Bloom Filter 是由Howard Bloom 在1970年提出的一种二进制向量数据结构,它具有很好的空间和时间效率,被用来检测一个元素是不是集合中的一个成员,这种检测的特点是只会对集合内的数据错判,而不会对非集合...
  • Egret 童话 与 现实

    2021-01-03 14:33:25
    通常有一个挂在嘴边理由:这样就可以用那些Flash领域里成熟工具来辅助开发了。一个典型(也是唯一一个有点现实意义场景)是:在FlashIDE里导出动画描述文件(json...
  • 1、构造函数特点 无返回值,也不能写成void 和类名相同 支持函数重载 ...复制构造函数参数为类对象本身的引用,用于根据一个已存在的对象复制出一个新的该类的对象,一般在函数中会将已存在对象的数据成员的
  • 客户通过这个标识(GUID)获得接口指针,在通过接口指针调用相应的成员函数。 COM接口特点: 1. 二进制特性:接口规范不建立在任何编程语言基础上,而是规定了二进制一级标准。任何语言只要有足够的数据...
  • C#微软培训教材(高清PDF)

    千次下载 热门讨论 2009-07-30 08:51:17
    1.3 C#语言的特点.8 1.4 小 结 .11 第二章 运行环境 全面了解.NET.12 2.1 .NET 结构.12 2.2 公用语言运行时环境与公用语言规范.13 2.3 开 发 工 具 .17 2.4 小 结 .19 第三章 编写第一个应用程序 .20 ...

空空如也

空空如也

1 2 3
收藏数 59
精华内容 23
关键字:

常数据成员的特点