静态成员

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

静态成员变量:

所有对象共享同一份数据

在编译阶段分配内存

类内声明,类外初始化

静态成员函数:

所有对象共享同一个函数

静态成员函数只能访问静态成员变量

类内声明,类外初始化

#include<iostream>
using namespace std;
class person
{//1.所有对象共享同一份数据//2.在编译阶段分配内存//3.类内声明,类外初始化
public:static int m_A;
};
void test()
{person p;cout << p.m_A << endl;
}
int main()
{test();system("pause");return 0;
}

会报错:

需要在类外声明:

int person::m_A = 100;

静态成员变量     不属于某个对象上,所有对象都共享同一份文件

因此静态成员变量有两种访问方式

//1.通过对象进行访问
person p;
cout << p.m_A << endl;

(只有静态成员能使用   方式2  访问)

//2.通过类名进行访问
cout<<person::m_A<<endl;

静态成员函数

//1.所有对象共享同一个函数
    //2.静态成员函数只能访问静态成员变量

访问方式

    //1.通过对象访问person p;p.func();//2.通过类名访问person::func();

对这里能通过类名访问的理解:

因为静态成员函数不属于某一个对象上面,大家共享同一个。无需创建对象就可以访问。

对象模型

成员变量和成员函数分开存储。

只有非静态成员变量才属于类的对象。

空对象占用内存空间为1。

C++编译器会给每个空对象也分配一个字节空间,是为了区分空对象占内存的位置,每个空对象也应有一个独一无二的内存地址。

this指针

每一个非静态成员函数只会诞生一份函数实例,也就是说多个同类型的对象会共用一块代码,

那么,如何区分哪个对象调用自己的呢?

C++通过提供特殊的对象指针,this指针,解决上述问题,this指针指向被调用的成员函数所属的对象。(this指针被每一个非静态成员函数隐含,this指针无需定义,直接使用即可)

用途:

1.解决名称冲突

class person
{
public:person(int age){this->age = age;}int age;
};

2.返回对象本身

class person
{
public:person(int age){this->age = age;}person& personaddage(person &p){this->age += p.age;return *this;}int age;
};
void test()
{person p1(10);person p2(10);p2.personaddage(p1).personaddage(p1).personaddage(p1);//链式编程思想cout << p2.age << endl;
}

空指针调用成员函数

C++允许空指针调用成员函数

#include<iostream>
using namespace std;
class person
{
public:void showname(){cout << "person类" << endl;}void showage(){cout << m_age << endl;//默认this->m_age,但这里this是空指针,所以出现问题}int m_age;
};void test()
{person* p=NULL;p->showname();p->showage();//这里会出错
}
int main()
{test();system("pause");return 0;
}

解决办法:

void showage(){if (this == NULL){return;}cout << m_age << endl;}

const修饰成员函数

常函数:(成员函数后加const后,称为常函数)

常函数内不可以修改成员属性

成员属性声明时加关键字mutable后,在常函数中依然可以修改。


m_a=100;//相当于this->m_a=100

this指针的本质是指针常量,指针的指向不可修改 (person*const this

const person*const this

在成员函数后面加const ,修饰的是this指向,让指针指向的值也不可修改


加了mutable之后即使是在常函数里也可以修改。

常对象:(声明函数前加const后,称为常对象)

常对象只能调用常函数。

总结:

常函数/常属性  让成员属性  不可修改,加了mutable关键字就可以了。

【C++学习】类和对象--对象特性(2)相关推荐

  1. python代码学习——类与对象提升(继承、超继承,类的例题,魔术方法)

    python代码学习--类与对象提升 继承 继承的特殊属性: 代码示例 方法的重写和覆盖(overrrid) 总结 超继承 继承中的初始化 多继承 例题 类的魔术方法 哈希(hash)和eq方法 bo ...

  2. scala学习-类与对象

    类 / 对象 [<快学Scala>笔记] 一.类 1.Scala中的类是公有可见性的,且多个类可以包含在同一个源文件中: 1 class Counter{ 2 private var va ...

  3. java学习---类与对象

    java学习心得3 文章目录 java学习心得3 类 对象 关键字this 总结与反思 类 一 定义一个Java的类 属性 : 将数据存储在变量中 1成员变量 使用成员变量:对象名.变量名 使用成员方 ...

  4. java学习--类与对象

    文章目录 java学习--类与对象 类的定义与对象的使用 类的私有成员的使用 java学习–类与对象 类的定义与对象的使用 类的定义与对象的使用 类的定义步骤: public 类名: //定义成员变量 ...

  5. 类和对象的特性(C++谭浩强第三版笔记)

    0.0 从程序结构上看:   基于过程的程序中:围绕功能进行的,函数是构成程序的基本部分,程序面对的是一个个函数.   面向对象的程序中:除主函数外,其他函数基本上都出现在"类"中 ...

  6. 学习集合工具类CollectionUtils——List对象案例

    学习集合工具类CollectionUtils--List对象案例 一.依赖 二.案例 三.结果展示 一.依赖 <dependency><groupId>org.apache.c ...

  7. C++入门学习 类与对象

    类与对象 普通大一新生,C++入门.老师上课不讲课只看视频讲解,效率低.临近期末总结巩固已经学习过的内容. 一.构造函数 定义 类对象被创建时,编译系统对象分配内存空间,并自动调用该构造函数-> ...

  8. Python编程语言学习:python语言中快速查询python自带模块函数的用法及其属性方法、如何查询某个函数关键词的用法、输出一个类或者实例化对象的所有属性和方法名之详细攻略

    Python编程语言学习:python语言中快速查询python自带模块&函数的用法及其属性方法.如何查询某个函数&关键词的用法.输出一个类或者实例化对象的所有属性和方法名之详细攻略 ...

  9. Java学习 --- 类与对象

    目录 一.问题需求 二.类与对象关系图 三.类与对象的关系 四.什么是类 五.什么是对象 六.对象的内存分布图 一.问题需求 有两只猫,第一只叫小白,年龄:1岁,颜色:白色,第二只叫小黑,年龄:2岁, ...

  10. Java 学习 类与对象讲解

    类与对象的概念 : 什么是类 什么是对象 类与对象指的是一种编程思想,其中类是类别的概念,对象是这个类别中一个具体的个例 比如: 学生类对应 某一名具体的学生   计算机类 对应我正在使用的这台计算机 ...

最新文章

  1. 算法----摆动序列
  2. 清华大学 唐杰 计算机学院 怎么样,我国首位原创虚拟学生,后期希望“她”能够像人一样进行创新...
  3. Jmeter之控制线程执行到某个结果时退出执行(第二种解决方案)
  4. QT中树控件QTreeView开发实例
  5. java多线程--多线程基础小结
  6. Qt程式异常崩溃处理技巧(Win)
  7. sql 日期类型空值等于 1900-01-01
  8. A way to visualize mip levels
  9. DIV 内滚动条 样式的写法
  10. linux ansys内存不够,ANSYS 硬件配置建议
  11. Unity模型制作导出规范
  12. 2022年营收增长高达70%,智云健康“医院为先”战略成效持续凸显
  13. python小白系列2
  14. CentOS7.6安装图形界面失败,startx执行失败
  15. educoder/python第1关:学习-Python集合之应用一
  16. 工欲善其事必先利其器 之 DockerDesktop(下)
  17. 201621123031 《Java程序设计》第11周学习总结
  18. 我见过最通俗易懂的快速排序过程讲解,转自《坐在马桶上看算法:快速排序》
  19. spring boot2.X word转pdf
  20. [Drools]JAVA规则引擎 -- Drools

热门文章

  1. Windows的配置
  2. 移动通信原理英文缩写对照
  3. 改变世界的9大算法--PageRank
  4. 宝塔php怎么设置回收空闲进程,宝塔面板-回收站爆满后清理的三种方式
  5. 家用投影仪什么牌子好?怎样选投影仪
  6. 程序人生:如果编程语言都是女生,你会喜欢上谁?
  7. 清明雨纷,且容我思念
  8. 详解git pull命令和使用过程中遇到的常见问题:fatal: ‘origin‘ does not appear to be a git repository
  9. 物理层传输格式的用法,关于TF,TFS,TFC,TFCS,TFI,TFCI
  10. vue中使用XLSX导出多表头/单表头表格,开箱即用。