C++之初步认识类和对象

Posted 温蒂不吃糖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++之初步认识类和对象相关的知识,希望对你有一定的参考价值。

一、面向过程和面向对象

之前学习的C语言是面向过程的,关注的是解决问题的方法。平时在使用C语言时我们更注重通过它来调用函数、构造函数从而逐步解决问题。
而C++是基于面向对象的,关注的是对象,更倾向于将问题划分成不同的对象,然后完善对象的功能,最后依靠对象之间的交互来解决问题。

二、类的引入

在C语言中我们可以将多个变量定义在结构体中从而达到整合的作用。而在C++中,结构体内不仅可以定义变量,还可以定义函数。在C++中类一般用class定义。一般定义类的格式为:

class Classname

   //成员变量和成员函数。
;//(分号不要忘记)

在定义类的时候我们可以将声明和定义全部放在类体中,也可以将声明放在头文件中,定义放在源文件中。一般采用第二种定义方式更优,可以使程序更有序。

三、访问限定符

C++实现封装时用类将对象的属性与方法结合在一起,让对象更完善,通过访问权限选择性地将其接口提供给外部用户使用。
访问限定符有三个:

名称功能
public指定范围内的成员可以再类外直接访问
protected指定范围内的成员只能在类内直接访问,类外不能直接被访问
private同protected

作用域:从该访问限定符出现后一直到下一个访问限定符出现。
默认访问权限:struct的默认访问权限为public;class的默认访问权限为private;

四、封装

面向对象的三大特性:封装、继承、多态。
封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互。封装本质上是一种管理。

五、类的作用域

类体中是一个新的作用域,类的所有成员都在作用域中。在类体外定义成员的时候需要使用“::”来表明该成员所属的类域。

class person

   public:
     void Init();
   private:
     char _name[10];
     int _age;
;
void person::Init(char name,int age)

   _name=name;
   _age=age;

六、类的实例化

类只是一个“模板”,指出了该类中具有的成员,但是定义一个类之后该类并不会占用实际的空间内存来储存它。只有当类实例化以后,实例化的对象才会占用内存。简单来说,类就是设计图,类实例化的对象就是成品。一个类可以实例化出多个对象。

七、类对象的储存

类对象中有成员变量和成员函数。成员变量储存在类对象中,类成员函数则存储在公共区域(即不储存在类对象中)。
因此在计算类的大小时,只计算该类中成员变量之和,计算时要注意内存对齐,对其规则和结构体内存对其规则一致。空类大小为1。

八、this指针

我们在调用类中的成员函数时会有一点小问题。

class Date

  public:
    void Init(int year,int month,int day);
  private:
    int _year;
    int _month;
    int _day;  
;
int main()

    Date d1;
    Date d2;
    d1.Init(2022.1.16);
    d2.Init(2022.1.17);

我们知道类的成员函数是定义在类外的公共代码区的。那么在定义d1和d2两个类对象时,它们访问成员函数时都是访问的同一个函数Init(),但是显然Init()函数中的参数是与d1和d2无关的。那么Init函数在调用时是怎么知道的到底应该对d1还是d2操作呢?
C++中通过引入this指针来解决该问题。C++编译器给每个“非静态成员函数”增加了一个隐藏的指针参数,让该指针指向当前对象(函数运行时调用该函数的对象)。在函数体中所有成员变量的操作,都是通过该指针去访问。只不过所有的操作对用户是透明的,用户不需要传递,编译器自动完成。
也就是说this指针里边放了操作对象的地址,告诉函数操作目标,只不过在我们使用函数传参的时候,this指针是自动完成的,我们不用管,所以说对于Init()函数它的表面参数有3个,实际参数有4个(多了个this指针)。需要注意的是this指针的作用域在类内。
关于this指针有如下特性:
1.this指针的类型为:类的类型* const
2.this指针只能在成员函数内部使用
3.this指针本质上是一个成员函数的形参。所以对象中不存储this指针。
4.this指针是成员函数第一个隐含的指针形参,一般由编译器通过ecx寄存器自动传递。(this指针存放在寄存器中)

以上是关于C++之初步认识类和对象的主要内容,如果未能解决你的问题,请参考以下文章

C++之初步认识类和对象

C++初识类和对象

初识c++——类和对象

C++类和对象

C++类和对象

C++类和对象