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

C++中对象与类的详解及其作用介绍

什么是对象

任何事物都是一个对象, 也就是传说中的万物皆为对象.

对象的组成:

  • 数据: 描述对象的属性
  • 函数: 描述对象的行为, 根据外界的信息进行相应操作的代码
  • 具有相同的属性和行为的对象抽象为类 (class)
  • 类是对象的抽象
  • 对象则是类的特例

面向过程 vs 面向对象

面向过程

面向过程的设计:

  • 围绕功能, 用一个函数实现一个功能
  • 程序 = 算法 +数据结构
  • 算法和数据结构两者互相独立, 分开设计

面向对象

面向对象的设计:

  • 把算法和数据封装在一个对象中
  • 设计所需要的歌者类和对象
  • 向有关对象发送消息
  • 对象 = 算法 + 数据结构
  • 程序 = 对象*n + 消息

什么是类

在 C++ 中, 用类来描述对象. 类属于用户自定的数据类型, 并且该类型的数据具有一定的行为能力, 也就是类中所描述的方法. 通常来说一个类的定义包含两部分的内容, 一是该类的属性, 二是该类的所拥有的方法.

类的格式

格式:

1

2

3

4

5

6

7

8

class类名

{

public:

//公共的行为或属性

private:

//私有的行为或属性

};

例子:

main.cpp:

1

2

3

4

5

6

7

8

9

10

#include "Student.h"

usingnamespacestd;

intmain() {

Student student1(1,"Little white",'f');

student1.display();

return0;

}

Student.cpp:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

#include "Student.h"

#include <iostream>

usingnamespacestd;

Student::Student(intn, string p,charg) {

num = n;

name = p;

gender = g;

}

voidStudent::display() {

cout <<"num: "<< num << endl;

cout <<"name: "<< name << endl;

cout <<"gender: "<< gender << endl;

}

Student.h:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

#ifndef PROJECT1_STUDENT_H

#define PROJECT1_STUDENT_H

#include <string>

usingnamespacestd;

classStudent {

private:// 私有成员

intnum;// 学号

string name;// 名字

chargender;// 性别

public:

Student(intnum, string name,chargender);

voiddisplay();

};

#endif //PROJECT1_STUDENT_H

输出结果:

num: 1
name: Little white
gender: f

类的成员函数

类的成员函数是一个类的成员, 在类体重声明.

注: 如果一个类中不包含成员函数, 就等同于 C 语言中的结构体了, 体现不出类在面向对象程序设计中的作用.

函数访问权限

一般的做法: 讲需要被外界调用的成员函数指定为 public, 它们是类的对外接口. (有的函数只被本类中的成员函数调用, 以支持其他的函数操作, 应该将它们制定为 private)

私有的成员函数只能被本类中的其他成员函数所调用, 而不能被类外调用. 成员函数可以访问本类中任何成员 (包括私有和公用的), 可以引用在本作用域中有效的数据.

调用成员函数的权限:

  • private: 私有的
  • public: 公有的
  • protected: 受保护的

访问对象中成员的 3 种方法:

  1. 通过对象名和成员运算符访问对象中的成员
  2. 通过指向对象的指针访问对象中的成员
  3. 通过对象的引用变量访问对象中的成员

方法一

通过对象名和成员运算符访问对象中的成员.

Time 类:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

#ifndef PROJECT1_TIME_H

#define PROJECT1_TIME_H

classTime {

private:

inthour;

intminute;

intsecond;

public:

voidset_time(inth,intm,ints);

voidshow_time();

};

#endif //PROJECT1_TIME_H

main:

1

2

3

4

5

6

7

intmain() {

Timetime;

time.set_time(6, 6, 6);

time.show_time();

return0;

}

输出结果:

6:6:6

方法二

通过指向对象的指针访问对象中的成员.

Time 类:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

#ifndef PROJECT1_TIME_H

#define PROJECT1_TIME_H

classTime {

private:

inthour;

intminute;

intsecond;

public:

voidset_time(inth,intm,ints);

voidshow_time();

};

#endif //PROJECT1_TIME_H

mian:

1

2

3

4

5

6

7

8

9

10

11

intmain() {

Timetime;// 实例化time

time.set_time(6, 6, 6);// 设置时间

Time *p = &time;// 定义指针, 指向time地址

p->show_time();

(*p).show_time();

return0;

}

输出结果:

6:6:6
6:6:6

方法三

通过对象的引用变量访问对象中的成员.

引用变量共占同一段存储单元. 实际上它们是同一个对象, 只是不同的面子表示而已.

Time 类:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

#ifndef PROJECT1_TIME_H

#define PROJECT1_TIME_H

classTime {

private:

inthour;

intminute;

intsecond;

public:

voidset_time(inth,intm,ints);

voidshow_time();

};

#endif //PROJECT1_TIME_H

mian:

1

2

3

4

5

6

7

8

9

10

intmain() {

Time time1;// 实例化time

time1.set_time(6, 6, 6);// 设置时间

Time &time2 = time1;

time2.show_time();

return0;

}

输出结果:

6:6:6

inline 成员函数

使用内置函数只是影响编译过程. 使用内置函数可以节省运行时间, 但却增加了目标程序的长度:

内置函数:

  • 一般只将规模很小而使用频繁的函数声明为内置函数
  • 内置函数中不能包括复杂的控制语句, 如循环语句和 switch 语句
  • 对函数做 inline 声明, 只是程序设计者对编译系统提出的一个建议, 而不是指令性的
http://www.jsqmd.com/news/1097626/

相关文章:

  • Apache日志入侵分析实战:从日志定位到攻击链还原
  • 金融项目接口自动化测试实战:从概念到CI/CD集成的完整框架构建
  • Java+Selenium+Jmeter自动化测试实战:从框架搭建到性能压测全解析
  • 性能压测实战:如何精准筛选接口与深度解读报告
  • Web应用XSS防护实战:从原理到Agent-Skills平台纵深防御
  • AI驱动UI自动化测试:Maestro框架与LLM结合实现10倍效率提升
  • RPA项目工程化实践:基于pytest与GitHub Actions的自动化测试流水线
  • 华硕笔记本性能管家:G-Helper轻量控制工具三分钟上手指南
  • UI自动化测试实战:从原理到落地,构建可持续的自动化工程体系
  • 期货量化交易策略加密实战:外部程序隔离保护核心算法
  • Midscene.js视觉驱动架构:革新UI自动化测试,告别元素定位失效
  • 线上面试实时编程如何与面试官沟通?留学生在线写代码通关指南「蒸汽求职分享」
  • C++中声明、定义、初始化、赋值区别介绍
  • 深入剖析C++中的struct结构体字节对齐
  • Python实战WebService接口测试:从WSDL解析到自动化测试框架
  • 【Springboot毕设全套源码+文档】基于Java+springboot台球厅管理系统的设计与实现(丰富项目+远程调试+讲解+定制)
  • 基于agency-agents构建多智能体协作系统:从核心概念到实战应用
  • Nginx日志分析实战:基于命令行工具识别DDoS攻击特征
  • Java服务越权攻击的三大隐蔽漏洞与防御实践
  • 基于Pytest与Requests构建企业级接口自动化测试框架实战
  • Midscene.js与Playwright融合:提升75%自动化测试效率的工程实践
  • 7天接口自动化测试实战:从Pytest到Jenkins的完整框架搭建
  • Windows平台Cypress环境搭建与前端自动化测试实战指南
  • JMeter 5.4.1 性能测试实战:从架构解析到电商API压测
  • AI投资:一场万亿美元的“豪赌”,还是又一次“郁金香狂热”?
  • 基于MCP协议与真实浏览器的AI自动化测试框架ThinkBrowse实践
  • Python智能WAF实战:构建实时流量分析与动态规则引擎
  • 3分钟掌握Resemble Enhance:AI语音降噪增强终极指南
  • Blender自动化测试实战:基于pytest与GitHub Actions的CI/CD方案
  • 仿冒政府钓鱼攻击:技术原理、产业链拆解与防御实战指南