类和对象

在上周,我将VS2010升级到了VS2019,并且进一步学习了C++的知识。众所周知,类和对象是C++中最为关键的知识,那么这一篇博客就来为大家介绍C++中的类和对象。

何为对象?对象可以理解为一个具体的实例。何为类?用定义来说,类就是定义同一类所有对象的变量和方法的蓝图或原型。举一个例子,比如说,有一条狗,他就是一个对象,我们可以从它的身上抽象出各种信息,比如名字、年龄、品种等,而且我们还可以抽象出他的技能:叫和跑。我们可以把狗的信息看作是变量,狗的技能看作是方法,它们作为成员共同构成了这一“类”。接下来我们就看一下,在C++中,我们是怎么定义一个类的。

定义类

class+类名,然后在后面加上大括号就可以定义类(别忘了最后要加上分号)。在这里,我们抽象出了狗的一些信息,其中包括了字符串类型变量name和variety,整型变量age以及speak();和run();两个方法。那么有人会问,为什么不抽象出狗肉的蛋白质含量,或者狗的出栏周期呢?那是因为我们不是为了吃狗肉。这也说明了,目的不同,从对象中抽象出的信息也不同。

我们再看一个例子。一个电视,它可以有牌子、型号这一些信息,还有切换频道、增加减小音量这些方法。但是在电视机里面,有各种集成电路的工作,这些都是我们看不到的,如果将这些暴露给看电视的人,那么就会引起看电视的人的“不适”。所以,在定义类的时候,要分清楚什么是要暴露出来的,什么是要隐藏起来的,这就叫做“封装”。进而也就引出了“访问限定符”这个概念。

在类中,有三个访问限定符,分别为:public,公共的;private,私有的;protected,受保护的。在这里我只介绍前两个。我们需要暴露出来的成员就用public来修饰,需要隐藏起来的成员就用private来修饰,具体使用方法如下:

访问限定符的使用

如上图,我们就可以区分需要暴露出来的和需要隐藏的成员。

那么,我们如何访问类里面的成员呢,这里就要用到“对象的实例化”。

对象的实例化,就是计算机根据类的设计,制造出多个对象的过程。对象的实例化有两种方式,一个是从栈实例化对象,另一个是从堆实例化对象。什么是栈和堆?简单来说,他们都是内存的区。栈就是编译器在使用的时候自动分配,且在不使用的时候自动清除的内存区,里面一般是局部变量、函数参数等;堆就是需要用关键字new分配的内存块,需要我们自己去申请内存空间,并且使用完毕后要用delete手动释放空间。了解了栈和堆,我们就来看一下如何从他们二者之中实例化对象。


从栈实例化对象

从栈实例化对象的方法很简单,如果要定义一个对象,就用类名+对象名来定义;如果是要定义多个对象,就用类名+对象名数组来进行定义。


从堆实例化对象

从堆实例化有所不同,定义方法是;类名+指针=new 类名()。如果是一组对象,则把最后的小括号改为中括号。在最后,要将申请的空间释放,并且要让指针悬空。

接下来,我们就可以访问对象中的各个成员了。


访问对象成员1

上图是从栈实例化对象后,访问成员的方法。方法为对象名.数据成员名或对象名.成员函数名。

访问对象成员2

上图是从堆实例化对象后,访问对象的方法。需要指针名->(复合符号)数据成员名或成员函数名。

下面这段代码是通过两种不同方式实例化对象并且对成员进行访问的一个例子:

```

#include <iostream>

#include <string>

using namespace std;

class Coordinate

{

public:

int x;

int y;

void printX()

{

cout << x << endl;

}

void printY()

{

cout << y << endl;

}

};

int main(void)

{

Coordinate coor;

coor.x = 10;

coor.y = 20;

coor.printX();

coor.printY();

Coordinate* p = new Coordinate();

p->x = 100;

p->y = 200;

p->printX();

p->printY();

delete p;

p = NULL;

system("PAUSE");

return EXIT_SUCCESS;

}

```

运行结果为:


运行结果1

不难发现,在类的定义中,我们只用了public访问限定符,这说明在定义类的时候,访问限定符不一定要全部使用,要视情况而定。

本文先讲到这里,下一篇中将会介绍string字符串的用法,以及继续介绍类和对象的知识。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,142评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,298评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,068评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,081评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,099评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,071评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,990评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,832评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,274评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,488评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,649评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,378评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,979评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,625评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,643评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,545评论 2 352

推荐阅读更多精彩内容