当前位置: 首页 > news >正文

C++(2)类与对象(上)

1.面向过程和面向对象初步认识

C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。
C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。

2.类的引入

c语言中,结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数。

3.类的定义

//类 class Person { //可以定义成员函数 void Print() { cout << _age << endl; } //定义成员变量时前面建议加_ char _name[10]; int _age; };

class为定义类的关键字,ClassName为类的名字,{中为类的主体,注意类定义结束时后面分号。
类中的元素称为类的成员:类中的数据称为类的属性或者成员变量:类中的函数称为类的方法或者成员函数。

类的两种定义方式:

1.声明和定义全部放在类体中,需要注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。

//人 class Person { public: //显示基本信息 void showinfo() { cout << _name << "-" << _sex << "-" << age << endl; } public: char* _name; char* _age; int _age; };

2.声明放在.h文件中,类的定义放在.cpp文件中。

声明放在类的头文件person.h中

//人 class Person { public: //显示基本信息 void showInfo(); public: char* _name; char* _age; int _age; };

定义放在类的实现文件person.cpp中

#include "person.h" //显示基本信息 void Person::showInfo() { cout << _name << "-" << _age << "-" << _sex << endl; }

一般情况下,更期望采取第二种方式。

4.类的访问限定符及封装

4.1 访问限定符

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

#include<iostream> using namespace std; class Student { //公有的方法 public: void ShowInfo() { cout << _name << endl; cout << _age << endl; cout << _stuid << endl; } //一般情况下, //成员变量都是比较隐私的, //都会定义成私有或者保护 private: char _name[20]; int _age; int _stuid; }; int main() { Student s1; Student s2; return 0; }

【访问限定符说明】
1.public修饰的成员在类外可以直接被访问
2.protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的)
3.访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止
4.class的默认访问权限为private,struct为public(因为struct要兼容c)
注意:访问限定符只在编译时有用,当数据映射到内存后,没有任何访问限定符上的区别

【面试题】
问题:C++中struct和class的区别是什么?
解答:C++需要兼容C语言,所以C++中struct可以当成结构体去使用。另外C++中struct还可以用来定义类。和class是定义类是一样的,区别是struct的成员默认访问方式是public,class是struct的成员默认访问方式是private。

4.2 封装

【面试题】
面向对象的三大特性:封装继承多态
在类和对象阶段,我们只研究类的封装特性,那什么是封装呢?
封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互。

封装本质上是一种管理:我们如何管理兵马俑呢?比如如果什么都不管,兵马俑就被随意破坏了。那么我们首先建了一座房子把兵马俑给封装起来。但是我们目的全封装起来,不让别人看。所以我们开放了售票通道,可以买票突破封装在合理的监管机制下进去参观。类也是一样,我们使用类数据和方法都封装到一下。
不想给别人看到的,我们使用protected/private把成员封装起来。开放一些共有的成员函数对成员合理的访问。所以封装本质是一种管理。

5.类的作用域

类定义了一个新的作用域,类的所有成员都在类的作用域中**。*在类体外定义成员,需要使用:作用域解析符指明成员属于哪个类域。

#include<iostream> using namespace std; //人 class Person { public: //显示基本信息 void showInfo(); public: char* _name; char* _age; int _age; }; //这里需要指定showInfo属于Person这个类域 void Person::showInfo() { cout << _name << "-" << _age << "-" << _sex << endl; }
http://www.jsqmd.com/news/221373/

相关文章:

  • USB2.0入门教程:枚举过程的核心要点解析
  • 从传统到AI原生:用户画像技术的代际演进分析
  • Java中多线程异步调用
  • 【卫星】全球导航卫星系统信号处理、误差分析和定位的MATLAB 实现
  • 任意二阶量子门作用于多量子比特系统的状态向量演化公式摘要
  • 计算机毕业设计springboot幸福社区疫苗预约管理系统 基于Spring Boot的社区疫苗预约与管理系统设计与实现 社区疫苗预约管理平台的Spring Boot开发与应用
  • 一文说清Keil4在工业通信协议中的应用
  • 深度剖析CANFD和CAN在车载网络中的差异
  • JWT鉴权的庖丁解牛
  • d3dx9_30.dll文件丢失找不到问题 免费下载方法分享
  • 计算机毕业设计springboot实习生校内事务管理系统 基于Spring Boot的实习生校园事务综合管理系统 Spring Boot驱动的实习生校内事务信息化平台
  • 机器学习:强化学习算法
  • 【无宏恐惧】告别VBA禁用!用纯BAT脚本实现Excel复杂档案编号批量生成
  • VHDL课程设计大作业:自动生成状态转移表方法
  • 时序逻辑电路入门必看:基本概念与工作原理通俗解释
  • 零基础小白指南:轻松搞定Intel HAXM配置
  • 一文说清vivado安装教程2018全流程及依赖组件
  • 目前国内专注于企业系统集成服务的 AI 智能体有哪些?
  • es连接工具在日志分析系统中的核心作用:一文说清
  • 第 1 篇:《SpringBoot 启动慢到宕机?阿里 P7 手写的 9 个生产级方案,3 分钟→28 秒(附一键优化插件)》
  • 加法器学习路径:掌握数字设计的第一步
  • 智能审计AI助手日志分析模块设计:AI应用架构师教你构建实时审计监控系统
  • iPaaS 在餐饮行业的最佳实践分享
  • 机器学习-Q学习
  • Redis过期键删除策略:揭秘背后的高效管理机制
  • 文件夹内的文件如何一键压缩为多个独立压缩包
  • STM32之中断
  • QTabWidget样式表兼容性:Qt5到Qt6深度剖析
  • 无源蜂鸣器声音生成原理:结合PWM脉冲解析
  • 一文说清ST7735工作原理与引脚定义