C++类和对象的概念

C++类和对象的概念

面向对象程序设计

概念:(Object Oriented Programming,缩写:OOP)是一种程序开发的方法。 对象指的是类的实例,将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性

在c语言中使用struct可以对数据进行抽象封装,在c++中用class封装程序和数据,其访问权限体现了封装性。

封装:隐藏对象的属性和实现细节,仅对外公开接口和对象进行交互

struct 和 class 的区别?

  1. struct不能存放函数,class可以存放成员函数
  2. struct默认的变量和函数都是public,也就是不限制权限,可在结构外任意访问,而class默认private
  3. class里的变量可以先使用可以在定义之前

c++有四个作用域

局部,全局,类域和命名空间。其中类的作用域很关键。

类的成员在类的作用域内,可以任意互相访问。对象可以通过 . 运算符访问共有成员,对象指针用 ->。在类外定义成员,用 ::指明成员函数所属类域。

类和对象的区别?

类就像是一张图纸,限定了类的成员,并未分配实际内存来存储,也像是一种自定义数据类型和操作的封装集合。

用类实例化的对象都拥有自己的物理空间来存储其成员变量。

类对象的存储模型

class Person { 
public :   
    void Display ()  
    { }
public :   
    char    _name[20]; // 名字   
    char     _sex[3];   // 性别  
    int       _age;       // 年龄
}; 

sizeof(Person) //值为28

上面的代码说明两点

  1. 类和结构体一样,存在内存对齐问题
  2. 函数不在类体内存储,也不存函数指针

函数在公共代码区存放,因为所有对象的数据不同但是方法是相同的,因此不必存储多份。

数据和方法分开存放,方法怎么和调用它的对象联系起来?

答案是在函数参数里增加一个对象指针,this指针诞生了。

this指针特性:

  1. 是 类对象 * const 类型
  2. 是类成员函数的第一个默认参数,不能显式传递
  3. this指针不在类对象内存储,且作用域在成员函数内
  4. 只能在非静态成员函数内使用

什么是 _thiscall ?

是一种函数调用约定,特指参数个数确定的类成员函数的调用,this指针的值通过ecx寄存器赋值。

参数个数可变的函数通过压栈参数的方式(_cdecl)。

offsetof宏

define offsetof(s,m) (size_t)&(((s *)0)->m)

作用:求出结构体中某成员相对结构体的偏移位置

解析:首先把0强转为结构体指针类型,用结构体指针获取其成员变量m,&取成员变量地址,最后强转为int型,值就是成员相对结构体的偏移。

其实就是利用编译器帮我们求取成员m的相对地址。

猜你喜欢

转载自blog.csdn.net/hanzheng6602/article/details/80642872