浅谈类和对象整体概念

本文介绍了面向对象编程的基本概念,对比了面向过程与面向对象的区别。在C++中,类和struct的主要差异在于默认访问权限和继承权限。面向对象的三大特性——封装、继承和多态在C++中得以实现。封装通过访问权限控制实现,空类通常占一个字节。此外,文章还讨论了this指针、const和static在C++中的作用和用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

面向对象和面向过程的区别
面向过程:首先字面意思它是注重过程的,当解决一个问题的时候,面向过程会把事情拆分成: 一个个函数,然后按照一定的顺序,执行完这些方法(每个方法看作一个个过程),等方法执行完了,事情就搞定了。
面向对象: 首先字面意思它是注重对象的。当解决一个问题的时候,面向对象会把事物抽象成对象的概念,就是说这个问题里面有哪些对象,然后给对象赋一些属性和方法,然后让每个对象去执行自己的方法,问题得到解决。

在C++中class和struct的区别
在C++中class和struct几乎是一样的,也就是struct定义的结构体就是类
默认的访问权限不同:class默认访问权限为private,struct默认访问权限为public;
默认的继承权限不同:class默认继承权限为private,struct默认继承权限为public;
在写类模板类型的代码时,class可以出现在模板参数类表中用来声明类型,但是struct不行

C++面向对象的三大特性:封装、继承、多态

什么是封装?C++中是如何实现封装的特性?
封装的概念:将数据和数据的方法进行有机结合,隐藏对象中的属性和实现细节,仅对外公开接口和对象进行交互------电脑的充电接口,摄像头拍照
如何实现封装
通过类将对象的属性的方法包装在一起进行有机结合,然后通过访问权限决定哪些成员可以在类外被访问,哪些成员不可以在类外被访问,哪些成员可以在子类中访问但是在类外不能被访问,权限有public protected private

空类的大小是多少?为什么?
主流编译器,空类占一个字节。vs2013和Linux g++下,占一个字节就是区分同一个类所创建的不同对象

空类中有哪些内容
类中6个默认的成员函数:默认的成员函数就是类中没有显式定义编译器会自动生成
构造函数、拷贝构造函数:深浅拷贝、析构函数、赋值运算符重载、两个&重载:一个是普通类型成员函数, 一个是const类型的成员函数

什么是this指针
概念:this指针是非静态成员函数隐藏的一个参数,该参数时时刻刻指向当前对象(调用该函数的对象),让编译器区分清楚该次函数调用的是哪个对象进行操作
特性
1.this没有包含在对象中,不会影响对象sizeof的结果
2.是非静态成员函数的第一个隐藏参数
2.this的类型:普通成员函数:T const、const类型成员函数:const T const
3.传递方式:this call:this指针使用传递方式使用的exc寄存器进行传递
_cdecl:采用参数压栈的方式进行传递
4.该参数由编译器自动进行传递,用户不用去关心,因为该参数由编译器自动添加,因此也由编译器自动传递

解释一下const
在C语言中:

  1. 可以使用const修饰变量,表明该变量不可再修改,但仍旧是变量
  2. const还可以用来修改函数的参数,修饰函数的参数时,表明该函数中不能对形参进行修改,提高代码的安全性

在C++中:

  1. 修饰变量:在C++中const修饰的变量已经是常量,而且具有宏替换属性,只不过const修饰的常量替换时间在程序编译时,该常量会参与类型检测,提高代码的安全性
  2. 修饰函数参数:最常见方式是与引用配合,就是说不想通过形参来改变外部的实参
  3. 修饰类成员:修饰类成员变量:表明该成员变量不能修改,而且必须要在构造函数初始化列表位置进行初始化
  4. 修饰类成员函数:const修饰类的非静态成员函数,本质是在修改成员函数隐藏的this指针,表明在该成员函数中,不能对非静态的成员变量进行修改,如果要对某个成员变量进行修改时,而成员变量可以使用mutable关键字进行修饰

解释一下static
在C语言中:
修饰变量:

  1. 修饰全局变量:修饰全部变量后,这个全局变量具有文件作用域,只在定义它的文件里有效
  2. 修饰函数体中的局部变量:修饰局部变量后,这个局部变量具有局部作用域,它只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在,并且只在定义它的函数体中有效

修饰函数:表明该函数只能在当前文件中使用,也就是说被static修饰的函数具有文件作用域

在C++中:

  1. 修饰变量:与C语言作用相同
  2. 修饰函数:与C语言作用相同
  3. 修饰类成员:

static修饰类成员变量----静态成员变量,与普通成员变量区别:

  1. 在类中进行声明,但是要在类外进行定义
  2. 静态成员不包含在具体的对象中,是所有对象共享的,因此不影响sizeof的结果
  3. 访问方式:对象. 或者类名::
  4. 不能在构造函数初始化列表中进行初始化

static修饰类成员函数----静态成员函数,与普通成员函数的区别:

  1. 静态成员函数没有this指针
  2. 静态成员函数不能直接访问非静态成员变量
  3. 也不能调用非静态成员函数
  4. 也不能被const修饰,即静态成员函数不能作为const成员函数
  5. 也不能作为虚函数
  6. 静态成员函数调用:类型::静态成员函数的名字
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值