第二周:类和对象基础

面向对象程序设计的四个基本特点

抽象、封装、继承、多态。

面向对象程序设计的过程

1.从客观事物抽象出类

抽象出的事物带有成员函数与成员变量(类似于带函数的结构体)

成员变量和成员函数统称为类的成员。

通过类我们可以定义变量,类定义出来的变量,我们称为对象。

2.对象的内存分配

对象所占用的成员空间的大小等于所有成员变量的大小之和。

对象占用的空间不包含成员函数。

每个对象都有各自的存储空间,一个对象的成员变量改变了,不会影响另一个变量。

3.对象间的运算

和结构体变量一样,对象之间可以进行赋值操作,但是无法使用>,<,==,!=等操作,除非这些运算符被重载了。

4.使用类的成员变量和成员函数

用法一:对象名.成员名

用法二:指针->成员名

用法三:引用.成员名

5.类的成员函数和类的定义可以分开写

类名::函数名

int A::sum(void){ }

6.类成员的可访问范围

在类的定义中,用下列访问范围,用下列访问范围关键字来说明类的可访问范围:

private:私有成员

public:公有成员

protected:保护成员

这三个关键字的使用次数和先后次序没有限制

设置私有成员的机制,叫隐藏。

7.成员函数也可以重载和缺省

见上个博客

构造函数

基本概念

成员函数的一种,但是没有返回值:

1.函数名为类名,可以有参数,不能有返回值;

2.作用是对对象进行初始化,如给成员变量赋初始值

3.如果定义类时没有写构造函数,编译器会自动生成一个没有参数没有意义的构造函数。

4.如果定义了构造函数,则编译器不生成构造函数。

5.对象生成是构造函数自动被调用。对象一旦生成,就不能重复构造。

6.一个类可以用多个构造函数

为什么需要构造函数:

1.构造函数执行必要的初始化工作,有了构造函数就不比自己专门写初始化函数。

2.使用未初始化的对象,会导致程序出错。

构造函数在数组中的使用

1个参数就用{a,b,c};

2个及以上就用—{A(a,b),A(a,b)};

复制构造函数

概念

只有一个参数,即对同类对象的引用。

形如X:X(X&)或者X::X(const X&),二者选一,或者能以常量对象作为参数。

如果没有定义复制构造函数,那么编译器会自己生成。

如果定义了自己的复制构造函数,那么默认的复制构造函数不存在。

不允许X::X(X)这样的复制构造函数。

复制构造函数起作用的三种情况

1.当用一个对象去初始化同类的另一个对象时。

2.如果某函数有一个参数是类A的对象,那么该函数被调用时,类A的复制构造函数将被调用。

3.如果函数的返回值是类A的对象时,则函数返回时,A的复制构造函数被调用。

注意:对象间的赋值并不导致复制构造函数被调用。

常量引用参数的使用:如果函数的参数是对象,那么调用时一定会使用复制构造函数,开销较大,为了解决这个问题,我们可以使用对象的引用,如果不希望对象的值在函数内被引用,那么可以使用const。

类型转换构造函数

概念

定义转换构造函数的目的是实现类型自动转换。

只有一个构造参数,而且不是复制构造函数,一般就可以看做是转换构造函数。

当需要的时候,编译器会自动调用类型转换构造函数生成一个无名的临时对象

析构函数

~类名为析构函数的类型。

一个类只能有一个析构函数。

析构函数在对象消亡前做善后工作。

如果没有定义类的析构函数,这编译器自动生成缺省的析构函数,但是这个函数什么都不做。

对象数组在生命期结束后会对每一个数组成员调用析构函数

delete函数时自动调用析构函数

析构函数在对象作为函数返回值返回后被调用

最新文章

  1. 字符输出流Writer简要概括
  2. 4月13日学习笔记——jQuery工具函数
  3. bzoj1029
  4. Delphi NativeXml用法攻略 转
  5. Java基础知识强化之IO流笔记10:File类输出指定目录下指定后缀名的文件名称案例(File类的文件过滤器方法改进list( FilenameFilter ff))
  6. 手动升级Delphi控件时,修改inc文件的办法
  7. 自己开发轻量级ORM(三)
  8. 关于OpenGL和DX学习的取舍
  9. windows linux—unix 跨平台通信集成控制系统
  10. console.log
  11. Lesson 28 No parking
  12. deepin卸载mysql并安装设置mysql5.7
  13. replace只能输入小数
  14. Confluence 6 手动安装语言包和找到更多语言包
  15. 详解 leetcode 猜数字大小 II
  16. JS禁止右键查看源码,禁止复制,复制内容到剪切板
  17. bzoj 4842: [Neerc2016]Delight for a Cat
  18. Oracle EBS - Setup: 配置文件Profile
  19. mongodb 日志清理
  20. &lt;转&gt;MYSQL数据库数据拆分之分库分表总结

热门文章

  1. C#自动计算字符串公式的四种方法
  2. IDEA导入spring-boot-plus(二)
  3. SparkSQL Adaptive Execution
  4. Mysql优化(出自官方文档) - 第九篇(优化数据库结构篇)
  5. JavaScript在web自动化测试中的作用
  6. 利用ShardingSphere-JDBC实现分库分表
  7. Hibernate中Criteria的完整用法2
  8. HuffmanTree
  9. unity游戏开发_对象池
  10. vmware上安装的ubuntu连接不上网络