类的初始认识(跑路人笔记)<一>(1)

简介: 类的初始认识(跑路人笔记)<一>

面向对象和过程的初步介绍

C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。

C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。

类其实类似于我们C语言中的结构体,不过有对类进行了较多的修改使其更加优秀.

在C语言中我们只能向里面放变量,但是在类里我们可以向里面放函数

如下就是一个类

class date
{
public:
  void Init(int year = 1, int  month = 1, int day = 1)
  {
    _year = year;
    _month = month;
    _day = day;
  }
  void Print()
  {
    cout << _year << "-" << _month << "-" << _day << endl;
  }
private:
  int _day;
  int _month;
  int _year;
};

C++习惯使用class来创建类,不过你是用struct来创建类也是可以的=.=,最好使用class


而且C++中我们可以不用typora来省事了直接可以用类名来创建变量.


如我们就可以直接使用


int main()
{
  date a;
  a.Print();
  return 0;
}

类的定义

class className
{
 // 类体:由成员函数和成员变量组成
}; // 一定要注意后面的分号

类中的元素称为类的成员:类中的数据称为类的属性或者成员变量; 类中的函数称为类的方法或者成员函数。


一般向类中放函数可以有两种情况


声明定义都放在类中

值将声明放在类中,把定义放在.cpp的文件里

其中声明定义都放在类中的就如我们下面举的例子一样.


class date
{
public:
  void Init(int year = 1, int  month = 1, int day = 1)
  {
  _year = year;
  _month = month;
  _day = day;
  }
  void Print()
  {
  cout << _year << "-" << _month << "-" << _day << endl;
  }
private:
  int _day;
  int _month;
  int _year;
};

这样放入类中的函数,编译器默认其为内联函数.不过内联函数是建议具体要看编译器.


第二种情况


类似下面代码


image.png


我们一般推荐第二种方式.


(本文为了方便讲解先使用第一种方法)


类的访问限定符与封装

访问限定符

如果我们在C语言中使用结构体来写栈,如果有人不通过我们的函数接口来改变变量也是可以的.


如下图


image.png


我们好好的写好的代码就这么被人随便改了,我们后续再写代码的时候直接就一堆错误,非常痛苦.


于是我们的C++语言就加入了public private protected这三个来保护权力


image.png


public修饰的成员在类外可以直接被访问

protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的)

访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止

class的默认访问权限为private,struct为public(因为struct要兼容C)

注意:访问限定符只在编译时有用,当数据映射到内存后,没有任何访问限定符上的区别

class date
{
public:
  void Init(int year = 1, int  month = 1, int day = 1)
  {
    _year = year;
    _month = month;
    _day = day;
  }
  void Print()
  {
    cout << _year << "-" << _month << "-" << _day << endl;
  }
private:
  int _day;
  int _month;
  int _year;
};

我们的public下到private之间的内容是都是类之外可以访问的.

而我们private到类定义结束的区间都是我们类之外不能访问的.

相关文章
|
存储 Apache
Apache Hudi Savepoint实现分析
Apache Hudi Savepoint实现分析
230 0
|
6月前
|
存储 机器学习/深度学习 人工智能
告别信息焦虑,用这个国产AI工具做知识管理,大脑终于解放了
文章介绍了纳米AI知识库作为“第二大脑”的强大功能。它能高效管理海量信息,支持54种文件格式上传,自动提取关键数据并打标签,轻松整合工作与生活中的碎片化信息。通过场景测试显示,在工作和生活中,纳米AI可快速生成报告、提供精准数据,极大提升效率。其共享机制还促进了团队协作,释放了创造力,让用户从琐碎事务中解脱,专注于深度思考与创新。
|
机器学习/深度学习 自然语言处理 知识图谱
探索深度学习中的迁移学习:知识融合与创新应用
迁移学习在深度学习领域中扮演着重要角色,但其应用依然充满挑战与机遇。本文从知识融合和创新应用两个方面探讨迁移学习的发展趋势与前景,通过深入分析相关理论与实践案例,揭示迁移学习在解决现实问题中的潜力与局限,并展望其在未来的发展方向。
500 1
|
Web App开发 Rust JavaScript
分享2020年Github星级前20名JavaScript框架性能比较
之前有在《读 2020 年 Javascript 趋势报告展望 ES2020》介绍了主流的前端库,本文就来看看JavaScript框架之间的终极性能之战
981 0
|
机器学习/深度学习 数据可视化 数据处理
R语言用lme4多层次(混合效应)广义线性模型(GLM),逻辑回归分析教育留级调查数据(上)
R语言用lme4多层次(混合效应)广义线性模型(GLM),逻辑回归分析教育留级调查数据
|
移动开发 负载均衡 网络协议
Nginx代理WebSocket方法
Nginx代理WebSocket方法
|
域名解析 人工智能 网络协议
首个《“DNS+”发展白皮书(2023)》重磅发布
首个《“DNS+”发展白皮书(2023)》重磅发布
|
移动开发 缓存 网络协议
html5:webSocket 基础使用
html5:webSocket 基础使用
334 0
|
前端开发 JavaScript UED
No2.精选前端面试题,享受每天的挑战和学习
No2.精选前端面试题,享受每天的挑战和学习
|
弹性计算 Kubernetes 容器
ACK集群高弹性架构
ACK集群高弹性架构