C++远征之封装篇(上)笔记

所有内容都是听课笔记,愿课堂视频如下:

C++远征之封装篇(上)-慕课网
http://www.imooc.com/learn/382

类和对象

1 什么是类,什么是对象?

对象是具体的事物,而类是出于不同的目的从对象中抽象出来的,所以,同一事物可以抽象成不同的类。

举个例子:

一只狗狗,就是一个具体的事物,就是一个对象

当我们养一大群狗的时候,就不是指代一个了而是一群,那也就对应着变成了一个类了,会为狗建立一个档案,并清楚狗的某些信息,比如说:年龄,品种,所掌握的技能(叫,跑)等等,

将这些信息单独拿出来,就可以定义一个类了。

需要注意的是,“属性”和“方法”所对应定义的信息,并不是狗的所有的信息,只是一部分,比如,狗的属性不只是年龄和类别,还有公母,摇尾巴和不摇尾巴,对吧!狗的方法也不只是跑和叫,它还可以咬,还可以撒欢儿,滚来滚去等等,所以,类所抽象出来的对应信息,要视目的而定,同一个类所抽象出来的信息也可能完全不同。

类的定义:数据成员,成员函数

 2.类的访问限定符

再举一个例子

电视机的功能或细节有些被显示,有些并没有被描述,但并不意味着不存在,而是被隐藏起来了,

把实践细节封装起来,只暴露给用户关心的细节,这就是封装的意思。

如何把想要暴露的信息暴露出来,把想要隐藏的信息隐藏起来呢?

这就是C++中的访问限定符的作用了!如果定义的时候希望被暴露,就用“public”来修饰,如果希望被隐藏,就用“prevate”来修饰。

 对象的实例化

在c++中类就是一个模板,对象实例化就是计算机根据一个类制造出多个对象的过程。

1.对象的实例化分两种方式

一种是:从栈实例化,还有一种是从堆实例化。下面分别来说、

从栈实例化:

从堆实例化:

使用的时候做如下定义:如果要定义一个对象的话呢,就使用"TV"用一个指针指向一块儿内存(这块儿内存是用"new"运算符申请出来的),这块内存就是作为未来"TV"的对象来使用;当然,也可以申请一个数组,这个数组有20个元素,如果是从栈中申请对象(就是上例那样)不需要再释放,系统会自动将占用的内存回收掉。但如果是从堆中申请的,切记一定要将这块儿内存释放掉!(就是用“delete函数进行释放”)

那对象建立起来之后的目的是什么的?是通过访问对象的各种成员来达到预期的要求

那又该怎么访问这些对象成员呢?

2.对象成员的访问方法

对单一对象成员

通过不同实例化的方法,生成的对象在访问数据成员和成员函数的方式也不同。故而访问的方式也不同。

通过栈实例化对象后,如果想访问其对象的话,可以用“.”来赋相应的值,也可以用“.”来访问它的成员函数,下图就是用栈定义完一个对象后,来访问其的方式。

如果是通过堆实例化对象的话,如下图所示,定义一个指针p,p通过这样的一种符号“->”来进行访问,用完记得删除。

对数组对象成员(以堆为例)

如果我们要访问“type”,就要调用它的成员函数,那么就需要一个for循环来分别进行赋值和调用。如果是从堆中进行的,完成后记得释放内存

代码示例:

#include <iostream>
#include <stdlib.h>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */ class Coordinate//先定义一个类 ,所取的类名最好能一眼就能看出类的功能
{
public:
int x;
int y;
void printX()
{
cout<< x <<endl;
}
void printY()
{
cout<< y <<endl;
}
};//这里要打上一个分号,不要忘了!
int main(void)
{
Coordinate coor;//通过栈实例化
coor.x = ;
coor.y =;
coor.printX();
coor.printY(); Coordinate *p=new Coordinate();//通过堆实例化
if(NULL == p)//new 运算符存在申请失败的可能,故而引入if条件进行选择。
{
//failed
return ;
} p->x=;
p->y=;
p->printX();
p->printY();
delete p;
p= NULL; system("pause");
return ;
}
#include <iostream>
#include <stdlib.h>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */ class Coordinate//先定义一个类 ,所取的类名最好能一眼就能看出类的功能
{
public:
int x;
int y;
void printX()
{
cout<< x <<endl;
}
void printY()
{
cout<< y <<endl;
}
};//这里要打上一个分号,不要忘了!
int main(void)
{
Coordinate coor;//通过栈实例化
coor.x = ;
coor.y =;
coor.printX();
coor.printY(); Coordinate *p=new Coordinate();//通过堆实例化
if(NULL == p)//new 运算符存在申请失败的可能,故而引入if条件进行选择。
{
//failed
return ;
} p->x=;
p->y=;
p->printX();
p->printY();
delete p;
p= NULL; system("pause");
return ;
}

正常运行的界面如下(dev):

C++学习日记(一)————类与对象的更多相关文章

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

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

  2. 学习笔记——Java类和对象

    今天学习了Java的类和对象的相关知识,由于Java面向对象的编程的思想和C++几乎一样,所以需要更多的关注Java的一些不同之处. 1.类 1.1 在类这一块,除了基本的成员变量,成员方法,构造函数 ...

  3. 【Python学习之七】类和对象

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 python3.6 一.面向对象编程1.概念(1)面向对象编程(OOP ...

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

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

  5. Java学习第二篇:类,对象,成员属性,成员方法,构造方法,类变量,类方法

    一.类的定义 一个全面的类定义是比较复杂的,  定义如下:

  6. php学习小记2 类与对象

    php类的一些特性: 1. 伪变量$this.$this是一个到主叫对象的引用.取值:该方法所从属的对象,可能是另外的对象(前提,当该方法被静态调用时).$this变量存在于一个类的非静态方法中,在静 ...

  7. (转)一步一步学习PHP(5)——类和对象

    OO的强大我不想再多说,如果你不认同OO,那么当你放眼当前流行的语言,有哪个又不支持OO的,也许这个很有说服力了吧. 在这一节中,我们就来看看在PHP中如何创建一个类和对象. 1. 创建类 在PHP中 ...

  8. Java学习笔记之——类与对象

    1.参数的传递方式 1)值传递 2)引用传递 2.类和对象: (1)类的定义: public class 类名{ 类型 属性1: 类型 属性2: ……… public 返回值类型 方法名1(形参){ ...

  9. Scala学习随笔——深入类和对象

    函数化对象(又称方程化对象)指的是所定义的类或对象不包含任何可以修改的状态. 本篇随笔就是着重记录函数化对象.定义了一个有理数类定义的几个不同版本,以介绍 Scala 类定义的几个特性:类参数和构造函 ...

  10. java学习(2):类和对象

     一.类 类可以看成是创建对象的模板,它描述一类对象的行为和状态.创建对象也叫类的实例化.类必须先定义才能使用. 通过下面一个简单的类来理解下Java中类的定义: public class Dog { ...

随机推荐

  1. 【原创】08. easyui form控件,回调参数存在后缀 audio controls="controls" style="display: none;"></audio>

    版本: jQuery EasyUI 1.4.3 springmvc 3.2.6 谷歌浏览器,内核版本 chrome 56.0.2924.87 360急速浏览器,内核版本 chrome 50.0.266 ...

  2. C++ STL set详解

    一.解释 p { margin-bottom: 0.25cm; direction: ltr; color: #000000; line-height: 120%; text-align: justi ...

  3. POJ2236 Wireless Network 并查集简单应用

    Description An earthquake takes place in Southeast Asia. The ACM (Asia Cooperated Medical team) have ...

  4. NOIP 2001 提高组 题解

    NOIP 2001 提高组 题解 No 1. 一元三次方程求解 https://vijos.org/p/1116 看见有人认真推导了求解公式,然后猥琐暴力过的同学们在一边偷笑~~~ 数据小 暴力枚举即 ...

  5. html+css3实现长方体效果

    网上大都是正方体的效果,由于做一个东西需要,写了一个HTML+css3实现的长方体,有需要的也可以看看.                   2017-07-25         21:30:23 h ...

  6. python--DenyHttp项目(2)--ACM监考服务器端

    服务器端: #coding:utf-8 ''' ServerGui.py 设置比赛开始时间 设置比赛结束时间 若时间无误启动监听服务 ''' import time import re import ...

  7. 脱壳练习之bitarts 5.0

    运行界面 一开始不是PUSHAD,这里我们跟到PUSHAD指令处,按F7执行该指令,接着在寄存器窗口中定位到ESP寄存器的值,在其上面单击鼠标右键选择-Follow in Dump. 仅允许非商业转载 ...

  8. MATLAB匹配按列碎开的纸片

    纵向切开的纸片的拼接 2013 CUMCM_B %% paper_cutting.m clear, close all clc %% import pictures, and save into im ...

  9. js获取select下拉框选中的的值和判断checkbox是否选中状态

    html: <select id="lib_select"  name="">   <option   value="1" ...

  10. python selenium无法最大化窗口

    问题原因:报错提示cannot get automation extension根据各种调试,发现是对应版本不对,上图发现selenium的版本是57.0.2987.133,需要driver为2.29 ...