第二周:类和对象基础

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

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

面向对象程序设计的过程

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函数时自动调用析构函数

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

MOOC C++笔记(二):类和对象基础的更多相关文章

  1. Objective-C 笔记二 类、对象和方法

    对象就是一个物件.面向对象的程序设计可以看成一个物件和你想对它做的事情.这与C语言不同,C语言通常称为过程性语言.在C语言中,通常是先考虑要做什么,然后才关注对象,这几乎总是与面相对象的思考过程相反. ...

  2. Java学习笔记之---类和对象

    Java学习笔记之---类和对象 (一)类 类是一个模板,它描述一类对象的行为和状态  例如:动物类是一个类,动物们都有属性:颜色,动物们都有行为:吃饭 public class Dog { Stri ...

  3. Java基础 之二 类和对象

    1.基础概念 1) 概念 简单来说,类是具有相同特征事物的抽象,比如有轮子的都可以抽象为车:对象则可以看做类的具体实例,比如创建一个法拉利的车,就是车这个类的实例. 抽象.封装.继承.多态是类的四个特 ...

  4. java 类与对象基础整理

    之前学习javaSE的时候,没有针对性地对对类与对象的一些基础进行整理,下面这些内容是笔记内容整理后的,希望以后自己可以通过这些博客时常复习! 一.类and对象的基础 类似于类的生命啊,类与对象的关系 ...

  5. Java学习笔记 04 类和对象

    一.类和对象的概念 类 >>具有相同属性和行为的一类实体 对象 >>实物存在的实体.通常会将对象划分为两个部分,即静态部分和动态部分.静态部分指的是不能动的部分,被称为属性,任 ...

  6. JAVA 类和对象基础知识详解

    /*文章中用到的代码只是一部分,需要源码的可通过邮箱联系我 1978702969@qq.com*/ 和C++一样,JAVA也是一门面向对象的语言,其基础和核心是类和对象.而面向对象的思想是来源与显示生 ...

  7. java类与对象基础篇

    java面向对象基础篇 面向对象程序设计(Object Oriented Proframming ,OOP) 面向对象的本质是:以类的方式组织代码,以对象的方式组织(封装)数据. 面向对象的核心思想是 ...

  8. 《PHP Manual》阅读笔记3 —— 类与对象

    1.PHP 中的所有函数和类都具有全局作用域,可以定义在一个函数之内而在之外调用,反之亦然. PHP 不支持函数重载,也不可能取消定义或者重定义已声明的函数. 当一个函数是有条件被定义时,必须在调用函 ...

  9. J2SE基础:1.类和对象基础

    什么是对象 在Java语言,全部的人,事物或者模块都是一个对象. 同样的对象具有一些同样的特性. 狗,猫,蛇3个对象(动物的对象) 苹果,梨,桔子3个对象(水果的对象) 什么是类 能够将现实生活中的对 ...

随机推荐

  1. 贪心算法-过河问题 pojo1700

    过桥问题: 黑夜,只有一只手电筒 A过桥需要1s B过桥需要3s C过桥需要5s D过桥需要8s E过桥需要12s 求最小过桥时间 贪心算法: 从最大的开始过去,最小的两个做为辅助. 假如左岸人数为2 ...

  2. 建立apk定时自动打包系统第二篇——自动上传文件

    在<建立apk定时自动打包系统第一篇——Ant多渠道打包并指定打包目录和打包日期>这篇文章中介绍多渠道打包的流程.很多时候我们需要将打包好的apk上传到ftp中,这时候我可以修改custo ...

  3. 【JVM从小白学成大佬】开篇

    JVM的重要性毋庸置疑,可以毫不夸张的说Java虚拟机是整个Java平台的基石. JVM方面的知识,也一直是BAT等大厂面试考核的重点.特别是JVM调优,故障排查性能调优,你知道该从哪些方面入手吗? ...

  4. Nginx + fastcgi + php 的原理与关系

    CGI:Common Gateway Interface 公共网关接口,web服务器和脚本语言通信的一个标准.接口.协议[协议] FastCGI:CGI协议的升级版[协议] PHP-CGI: 实现了C ...

  5. MACOS安装使用kafka

    安装(会自动依赖安装zookeeper) brew install kafka 启动zookeeper cd /usr/local/Cellar/kafka/2.1.1/bin/ ./zookeepe ...

  6. volatile、Synchronized实现变量可见性的原理,volatile使用注意事项

    变量不可见的两个原因 Java每个线程工作都有一个工作空间,需要的变量都是从主存中加载进来的.Java内存模型如下(JMM): 线程访问一个共享的变量时,都需要先从主存中加载一个副本到自己的工作内存中 ...

  7. 2019-04-23-Python爬取有声小说

    目录 Python爬取有声小说 摘要 1.获取下载链接 2.分析规律,循环爬取 3.保存到本地,批量命名 4.界面设计 5.效果展示 Python爬取有声小说 通过python爬取网站的资源,实现批量 ...

  8. hihocoder #1616 : 是二叉搜索树吗?(模拟题)

    题目链接:http://hihocoder.com/problemset/problem/1616 题解:就是简单的模拟一下至于如何判断是不是二叉搜索树可以通过中序遍历将每个点存下来看是不是递增的如果 ...

  9. CodeForces 779D. String Game(二分答案)

    题目链接:http://codeforces.com/problemset/problem/779/D 题意:有两个字符串一个初始串一个目标串,有t次机会删除初始串的字符问最多操作几次后刚好凑不成目标 ...

  10. hud 3555 Bomb 数位dp

    Bomb Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others) Total Subm ...