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. Canvas 仿百度贴吧客户端 loading 小球

    前言 几天前在简书上看到在一篇文章<Android仿百度贴吧客户端Loading小球>,看了一下作者,他写了两个好玩的 demo,效果图如下: 今天趁着周末有空,用 H5 的 Canvas ...

  2. 如何快速查看github代码库中第一次commit的记录

    发现一个别人推荐的代码库用来学习源码, star星还不少,别人推荐从第一次commit开始阅读,于是试着去找commits的第一次 问题来了,这个代码库commits7855次,点击进入commits ...

  3. 超超超简单的bfs——POJ-3278

    Catch That Cow Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 89836   Accepted: 28175 ...

  4. Ext js Grid

    Ext.onReady(function () {                   var proxy = new Ext.data.HttpProxy({                  ur ...

  5. TensorFlow学习笔记1——安装

    1. 准备好Anaconda环境 具体参见:http://blog.csdn.net/zhdgk19871218/article/details/46502637 2. 建立名叫TensorFlow的 ...

  6. linux下添加定时任务

    linux下定时任务文件在/etc/crontab 直接vim /etc/crontab 打开就行 在crontab文件中如何输入需要执行的命令和时间.该文件中每行都包括六个域,其中前五个域是指定命令 ...

  7. [算法题] Remove Duplicates from Sorted Array ii

    题目内容 本题来源LeetCode Follow up for "Remove Duplicates": What if duplicates are allowed at mos ...

  8. ubuntu创建wifi热点(android可识别)亲测可用

    转自http://jingyan.baidu.com/article/ea24bc39b03fc6da62b331f0.html 如何在ubuntu系统下创建android可识别热点?一般环境下创建的 ...

  9. latch相关视图整理

    latch相关视图整理(原创) V$LATCH V$LATCH视图在选取X$KSLLT记录时,进行了Group By及SUM运算,从而得出了一个汇总信息,保存了自实例启动后各类栓锁的统计信息.常用于当 ...

  10. 多人开发的git项目如何保持提交日志为一条直线?

    多人开发的git项目如何保持提交日志为一条直线? 一.Git的项目的git常用操作 a)Git clone 项目地址 从远程仓库克隆项目到本地 b)Git pull 从当前分支拉取更新代码 c)Git ...