c++类与对象(一)
一、类的大小及类的成员在内存中的存放
类中有成员变量,也有成员函数,成员变量有不同的值,但是成员函数都是相同的,多个类对象重复存储成员函数是没有意义的,所以采用成员变量和成员函数分离的方法,每个对象保存自己的成员变量,但是只保存一份公共的成员函数。
二、this指针
C++编译器给每个“非静态的成员函数“增加了一个隐藏的指针参数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有成员变量的操作,都是通过该指针去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成。这是类的成员函数能够被不同的类调用时精确访问的关键。
三、构造和析构函数和拷贝构造函数
构造函数用于初始化一个对象,函数名与类名完全相同,没有任何返回值,就连void
也没有,
析构函数是构造函数的反义词,用于在对象释放内存之前对其成员进行清理,析构函数名为类名之前加上~
,同样没有返回值。
拷贝构造函数也叫做副本构造函数,用于使用对象初始化另一个对象,函数名和类名相同,无返回值,另外,拷贝构造函数的参数为类对象的引用类型,原因是如果为类对象,那么在传参时又会调用拷贝构造函数,也就是他本身,如此会造成死循环递归。
需要注意的是这三种构造函数都是对对象进行处理,不是说去为对象开辟空间或回收空间,是在对象已经开辟好的情况下处理而已。
四、赋值运算符重载
运算符重载是指针对不同的类设计出不同的运算符运算方法,使用operator
关键字进行重载运算符。类默认有赋值运算符的重载函数,如下:
class& operator = (const class& obj)
{......return *this;
}
赋值运算符重载函数返回值为左值的引用是防止有连续赋值的情况,a = b =c
被解析为a.operator = (b.operator = (c))
,此时如果函数没有返回值,那么a调用函数会报错。
五、常方法
常方法是指在定义方法时在方法标签后加一个const
,常方法就是不能修改类成员变量的方法。
int a(int b, int c) const
{......
}
常方法不能修改成员变量其原理还是this指针,const修饰的其实是影藏的this指针,所以没有this指针的方法是不能使用const定义为常方法的。
c++类与对象(一)相关推荐
- C++ 笔记(18)— 类和对象(this 指针、指向类的指针、类静态成员变量和函数)
1. this 指针 在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址. this 指针是所有成员函数的隐含参数.因此,在成员函数内部,它可以用来指向调用对象. 友元函数没有 thi ...
- C++ 笔记(16)— 类和对象(类定义、类实例对象定义、访问类成员、类成员函数、类 public/private/protected 成员、类对象引用和指针)
1. 类的定义 类定义是以关键字 class 开头,后跟类的名称.并在它后面依次包含类名,一组放在 {} 内的成员属性和成员函数,以及结尾的分号. 类声明将类本身及其属性告诉编译器.类声明本身并不能改 ...
- C02-程序设计基础提高班(C++)第9周上机任务-类和对象
第9周:阅读教材第8章(p231-262),主要内容是类和对象,学会定义类和对象解决问题,完成第9周上机任务: (回到C02-程序设计基础提高班(C++)学习安排) 实践任务: [任务1]阅读.运行下 ...
- 函数返回类的对象与拷贝构造函数
C++中,如果我们在一个函数中,定义了一个类的对象,然后返回这个对象,在main函数中用一个对象去接受这个返回的对象的时候,这里面参与的函数调用大家可能不熟悉,这里通过程序和注释的方式给大家讲解一下. ...
- ZJU-java进阶笔记 第一、二周(类与对象,对象交互)
对象变量是对象的管理者,而非所有者 VendingMachine vm = new VendingMachine(); this指代当前对象 成员函数可以直接(不需要点运算符)调用本类的其他成员函数 ...
- 3个题目熟悉类和对象基础
1.按要求编写Java应用程序: (1)编写西游记人物类(XiYouJiRenWu)其中属性有:身高(height),名字(name),武器(weapon)方法有:显示名字(printName),显示 ...
- 刻意练习:Python基础 -- Task10. 类与对象
背景 我们准备利用17天时间,将 "Python基础的刻意练习" 分为如下任务: Task01:变量.运算符与数据类型(1day) Task02:条件与循环(1day) Task0 ...
- java中具有继承关系的类及其对象初始化顺序
先说结论 对于具有继承关系的类,它们的类和对象构造顺序为:父类的类构造器() -> 子类的类构造器() -> 父类成员变量的赋值和实例代码块 -> 父类的构造函数 -> 子类成 ...
- python的类和对象_Python类与对象实验
一.任务描述 本实验任务主要对Python类与对象进行一些基本操作,通过完成本实验任务,要求学生熟练掌握Python类与对象的关系,并对Python类与对象的基本操作进行整理并填写工作任务报告. 二. ...
- 简单介绍实体类或对象序列化时,忽略为空属性的操作
这篇文章主要介绍了实体类或对象序列化时,忽略为空属性的操作,具有很好的参考价值,希望对大家有所帮助.如有错误或未考虑完全的地方,望不吝赐教 第一种,在配置文件配置 在application.xml直接 ...
最新文章
- AC日记——中位数 洛谷 P1168
- PHP导出pdf文件_dompdf
- 简单易懂棒棒哒的视频传输工具!
- window.btoa()方法;使字符编码成base64的形式
- 机器学习难?那是你没看过这张路线图!
- [转载] C语言C++指针与java中引用的一点对此
- SPOJ SUBST1 New Distinct Substrings(后缀数组 本质不同子串个数)题解
- Android 中进程的级别以及 Service 的优先级
- Multisim 版本针对3D元件库说明
- 红米note4android,红米Note4深度评测
- Django ORM 使用手册
- WidsMob Denoise如何使用?WidsMob Denoise图片降噪教程
- 经济危机离你并不遥远!
- 一文读懂ICO、IFO、IMO、IEO的区别,或许是全网最全科普
- comsumer配置
- 搜狗输入法的符号大全里面可以输入下标
- u盘误删文件怎么恢复
- 2019-详细Android Studio开发百度地图(5)—百度地图_导航和TTS语音播报的实现
- C语言排列组合(函数
- Spring cloud 微服架构(一)
热门文章
- mac电脑投屏到小米盒子_iphone投屏到苹果电脑方法——macw站
- jzoj 6012.【NOIP2019模拟1.25A组】荷马史诗 dp
- C#的HTTP协议中POST与GET的区别
- 计算机文化论文5000字,大学生科技论文5000字
- SqlServer按半小时分组统计
- 在excel中使用offset和match函数进行二维表对二维表的匹配
- 记录一次teamview无法远程连接对方teamview的过程
- 手动压缩Outlook PST和OST文件
- SEVERE: [FATAL] [INS-32038] The operating system group specified for central inventory
- 10大免费视频素材网站