在c语言中我们学过结构体,在c++中我们引入了一个新的概念叫做类。类可以理解为是c语言中结构体的升级版。为什么这么讲呢?结构体中我们只能声明结构体成员变量,关于操作结构体成员变量的函数需要我们在结构体外面创建。而c++中的类就很好的弥补了这一个缺陷,类中不仅可以有成员变量,还可以有成员方法(成员函数),接下来的这些你听我慢慢跟你讲。
类的定义:
class className
{
// 类体:由成员函数和成员变量组成
}; // 一定要注意后面的分号
class为关键字,className为类的名字。
成员函数在类中有两种实现方式,第一种是函数的声明和定义都在类中:
此方法创建的成员函数默认是内联函数!!
class Stack
{
public:
void Init()
{
//
}
void push()
{
//
}
private:
int* _a;
int _top;
int _capacity;
};
第二种是类声明放在.h文件中,成员函数定义放在.cpp文件中,注意:成员函数名前需要加类名::
讲到这有些人就好奇了,为什么代码中会有public、private等?
这里我们就涉及了新的概念:访问限定符
这里的访问限定符有三个:public、protected、private
public的意思是公有,在类的外面成员变量或者成员函数都可以使用。
protected和private是保护和私有的意思,就仿佛是一堵墙将类里面的东西保护了起来,只能在类中使用!!!
那么为什么要设计成这样呢?
这就显示了类的一大特性:封装。
那么现在我考大家一个问题:
既然我们创建了一个类,那么它就有它自己的类域,那为什么我不能通过类域访问呢?
原因:当我们用class声明了一个类后,它就相当于一张图纸,里面的变量不占据内存。而我们要访问域中数据时必须是真实存在的(需要占用内存)。所以解决方法如下,先创建出类的对象(将图纸建造成房子),再通过对象访问成员(在建好的房子中干活)。
int main()
{
Stack s1;
s1._top = 10;
return 0;
}
类大小的计算:
请大家计算一下类的大小:
class A {
public:
void PrintA()
{
cout<<_a<<endl; }
private:
char _a;
};
让我们揭晓答案:
答案是1,毫无疑问类中的函数不占据空间,成员变量占据的内存大小和我们之前学习过的结构体一样用内存对齐来计算。类中的函数放在了公共代码段,当调用函数的时候会在公共代码区域找到它,这样的设计节约省了空间!!
当我们遇到空的类时,它的大小不是0,是1,切记!!!
this指针:
现在我们知道函数是存放在公共代码区的。当我们用类创建两个不同的对象是,它们的成员变量是不同的,但是调用的函数却是同一个,那么这个公共的函数是如何区分不同类中的数据呢??这里我们要提到一个新的概念叫做this指针。
this 指针是一个隐藏的参数。当我们用一个对象调用一个函数的时候,实际上是把对象的地址传给了this指针,thin指针再通过地址找到对象中的数据。
d1.Print(); //Print(&d1)
d2.Print(); //Print(&d2)
this指针既然是个形参,那么它就是存放在栈区,记住this指针可以为空!!!
关于类的上篇就到这里,希望大家多多支持,康康也会抓紧找时间把类的下篇更新完!!