基于C++的面向对象程序设计:类与对象的深入剖析

面向对象程序设计的基本特点

面向对象程序设计的基本特点包括:抽象、封装、继承、多态。

抽象

抽象是指对具体问题或对象进行概括,抽出其公共性质并加以描述的过程。一般情况抽象分为数据抽象和行为抽象,其中数据抽象是指一个对象区别于另一个对象的特征,行为抽象是指某类对象的共同特征。

封装

封装是指将抽象得到的数据和行为相结合,隐藏对象属性和实现细节且仅对外提供公共访问方式的过程。

继承

继承是指通过代码复用在保持原有类特性的基础上对子类进行具体说明的过程,通俗来说继承就是精简重复代码的手段。

多态

多态是指一段程序能够处理多种类型对象的能力,函数重载就是实现多态的一种手段。在 C++ 语言中多态可分为强制多态、重载多态、类型参数化多态和包含多态。

类是 C++ 语言支持面向对象思想的重要机制,是实现封装的基本单元类和对象是面向对象程序设计(OOP)的基本概念。在C++中,类是一种用户自定义的数据类型,它封装了数据成员和成员函数。对象是类的实例化,通过创建对象可以访问类的成员。

类的定义通常包括以下部分:

  1. 类名:用于标识类的名称。
  2. 数据成员:用于存储类的属性。
  3. 成员函数:用于操作类的属性。
  4. 访问控制符:用于控制类成员的访问权限,如public、protected和private。

对象的创建和使用如下:

  1. 声明对象:使用类名声明一个对象,例如ClassName objectName;
  2. 初始化对象:可以在声明对象时进行初始化,例如ClassName objectName(parameters);
  3. 访问对象成员:使用对象名和点运算符访问对象的成员,例如objectName.memberName;
类的定义

类一般由类名、数据成员、函数成员三部分组成,定义类的基本形式为:

class 类的名称
{public:外部接口protected:保护性成员private:私有成员
}

其中 public、protected、private 表示访问控制属性,用于控制类成员的访问权限。特别的,没有分配控制属性的默认为 private 私有成员。

类成员访问控制

使用 public 关键字声明的公有成员可在类外访问,即公有类型成员定义了外部接口。输入:

#include<iostream>
using namespace std;
​
class area //定义 area 类。
{public: //定义公有成员,外部可以访问。double width;double length;
};
​
int main()
{area area1; //定义对象 area1。double AREA; //定义双精度型变量 AREA。area1.width=3; //外部访问公有成员,设置宽为 3。area1.length=3.1; //外部访问公有成员,设置长为 3.1。AREA=area1.width*area1.length; //计算面积。cout << AREA <<endl; //输出面积return 0;
}

此程序可以分为相对独立的两个部分,一是对 area 类的定义,二是主函数 main()。area 类定义了两个双精度型的公有成员,主函数访问类的公有成员实现数字相乘。

程序结果:

图片描述

使用 protected 关键字声明的受保护成员可在子类中访问。输入:

#include<iostream>
using namespace std;
​
class area //定义 area 类。
{protected://定义受保护的成员。double width;
};
​
class squarearea:area //定义 squarearea 子类。
{public: //定义公有成员。void setsquarewidth(double wid); //定义成员函数。double getsquarewidth(void);
};
​
//定义子类的成员函数。
void squarearea::setsquarewidth(double wid)
{width=wid; //通过 squarearea 子类访问 area 类中受保护的成员 width。
}
double squarearea::getsquarewidth(void)
{return width;
}
​
//程序的主函数 。
int main()
{squarearea square; //定义对象。square.setsquarewidth(3.1); //设置宽度为 3.1。cout <<"width:"<<square.getsquarewidth()<<endl; //输出设置的宽度。return 0;
}

此程序可以分为相对独立的三个部分,一是对 area 类的定义,二是对 squarearea 子类及子类函数的定义,三是主函数 main()。对于 area 类中受保护的成员 width 可以通过子类进行访问。

程序结果:

图片描述

使用 private 关键字声明的私有成员只能被本类的成员函数访问。输入:

#include<iostream>
using namespace std;
​
class area
{public: //定义公有成员double length;void setwidth(double wid);double getwidth(void);private://定义私有成员double width;
};
​
//定义公有成员函数
void area::setwidth(double wid)
{width=wid;
}
double area::getwidth(void)
{return width;
}
​
//主函数
int main()
{area len1; //定义对象area wid1;len1.length=3.1; //访问 area 类公有成员。cout<<"length:"<<len1.length<<endl;wid1.setwidth(3.2); //使用公有成员函数设置宽度。cout <<"width:"<<wid1.getwidth()<<endl;return 0;
}

此程序可以分为相对独立的两个部分,一是 area 类及其公有成员函数的定义,二是主函数 main()。私有成员 width 只能先被类中成员函数访问,再通过相关的公共成员函数实现外部访问。若在类外部使用 area.width=3.2; 方式访问 area 类的私有成员 width,则会报错。

程序结果:

图片描述

对象

在 C++ 语言中,对象是某类事物的实例。其声明形式为:

类名 对象名;

例如声明 area 类的对象 square:

area square;

访问对象的成员

定义了类及其对象后,则可访问对象的成员。访问 数据成员 基本形式为:

对象名.成员名

例如访问 area 类的对象 square 的数据成员 width:

square.width=3.2;

访问 函数成员 的基本形式为:

对象名.函数名(参数表)

例如访问 area 类的对象 square 的函数成员 setwidth(double wid):

square.setwidth(3.2);

类的成员函数

成员函数描述了类的行为。成员函数在类中只用说明其函数的返回类型、名字和参数表,而函数的具体实现在类外说明,其基本形式为:

class 类名
{函数的返回类型 函数名(参数列表)
}返回值类型 类名::函数名(参数列表) //特别的,在类外说明函数的具体实现时,需要使用类名限制成员函数,其形式为:类名::函数名(参数列表)。
{函数体
}

例如在 area 类中有成员函数 void setwidth(double wid);

class area
{...void setwidth(double wid);...
}//在类外说明函数的具体实现
void area::setwidth(double wid)
{函数体
}

访问类的公有成员计算体积

挑战

  1. 定义一个 volume 类,其中包含三个 double 型的公有成员 width、length、high。

  2. 在主函数中定义一个用于访问 volume 类成员的对象 volume1 和一个用于保存体积结果的双精度型变量 VOLUME。

  3. 返回 width 为 3、length 为 4,high 为 5.1 的体积结果。

目标

定义一个包含三个 double 型公有成员的类,主函数访问类的公有成员实现体积计算。

提示
  1. 一般使用 class 关键字来定义类。
  2. 对象的声明形式为:类名 对象名。
  3. 访问类的数据成员:对象名.成员名。
代码实现
#include<iostream>
using namespace std;class volume
{
public:double width;double length;double high;
};int main()
{volume volume1;double VOLUME;volume1.width = 3;volume1.length = 4;volume1.high = 5.1;cout << volume1.width << endl;cout << volume1.length << endl;cout << volume1.high << endl;VOLUME = volume1.width * volume1.length * volume1.high;cout << VOLUME << endl;//3//4//5.1//61.2return 0;
}

希望对你有帮助!!加油各位!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/444002.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【lesson4】高并发内存池ThreadCache(线程缓存)层实现

文章目录 ThreadCache层的结构申请内存逻辑释放内存逻辑自由链表的实现自由链表的成员变量自由链表的成员函数自由链表的完整实现 ThreadCache申请内存过程的实现ThreadCache需要的成员变量ThreadCache需要的成员函数ThreadCache.h文件代码Allocate的实现Deallocate的实现 封装…

Maven安装,学习笔记,详细整理maven的一些配置

Maven 1. 初识Maven 2. Maven概述 Maven模型介绍 Maven仓库介绍 Maven安装与配置 3. IDEA集成Maven 4. 依赖管理 01. Maven课程介绍 1.1 课程安排 学习完前端Web开发技术后&#xff0c;我们即将开始学习后端Web开发技术。做为一名Java开发工程师&#xff0c;后端 Web开发技术…

Asp.net移除Server, X-Powered-By, 和X-AspNet-Version头

移除X-AspNet-Version很简单,只需要在Web.config中增加这个配置节: <httpRuntime enableVersionHeader"false" />移除Server在Global.asax文件总增加&#xff1a; //隐藏IIS版本 protected void Application_PreSendRequestHeaders() {HttpContext.Current.Res…

RabbitMQ(一):最新版rabbitmq安装

目录 1 简介1.1特性及好处 2 安装2.1 Ubuntu22.04 apt安装最新rabbitmq1、一键部署2、验证3、RabbitMQWeb管理界面及授权操作4、添加远程用户5、一些常用命令 2.2 Docker安装RabbitMQ - Ubuntu22.041、安装docker2、启动rabbitmq 1 简介 RabbitMQ是一个开源的遵循AMQP协议实现…

【大厂AI课学习笔记】1.3 人工智能产业发展(3)

1.3.1 供给侧 技术层面&#xff1a;从实验室走向大规模的商用。 数据层面&#xff1a;数据正式成为重要的生产要素。 市场&#xff1a;供需互促的正向市场环境建立。 资本&#xff1a;走出炒作泡沫&#xff0c;聚焦价值领域。 平台&#xff1a;大厂普遍开放生态。 MORE&am…

js中原型和原型链的特点

文章目录 一、原型二、原型链三、总结参考文献 一、原型 JavaScript 常被描述为一种基于原型的语言——每个对象拥有一个原型对象 当试图访问一个对象的属性时&#xff0c;它不仅仅在该对象上搜寻&#xff0c;还会搜寻该对象的原型&#xff0c;以及该对象的原型的原型&#x…

[C++历练之路]C++多态底层逻辑知多少

W...Y的主页 &#x1f60a; 代码仓库分享&#x1f495; 前言&#x1f354;&#xff1a;学习了继承与多态&#xff0c;我相信大家对其底层的运用逻辑非常之好奇&#xff0c;今天我们就来探索一下多态中的底层逻辑&#xff0c;话不多说&#xff0c;我们现在开始&#xff01; 目…

BUUCTF-Real-[ThinkPHP]5-Rce

1、ThinkPHP检测工具 https://github.com/anx0ing/thinkphp_scan 漏洞检测 通过漏洞检测&#xff0c;我们发现存在rce漏洞&#xff01; 2、漏洞利用 ---- [!] Name: Thinkphp5 5.0.22/5.1.29 Remote Code Execution VulnerabilityScript: thinkphp5022_5129.pyUrl: http://n…

python打造光斑处理系统4:裁切光斑感兴趣区域

文章目录 图像裁切给定坐标裁切手动阈值裁切 光斑处理&#xff1a;python处理高斯光束的图像 光斑处理系统&#xff1a;程序框架&#x1f31f;打开图像&#x1f31f;参数对话框/伪彩映射 图像裁切 一般来说&#xff0c;光斑只占图像很小一部分&#xff0c;为了更好的观感和更…

剪映使用_

目录 导出的视频大小过大 Adobe Premiere Pro 2022导入视频文件压缩类型不支持 导出的视频大小过大 https://www.bilibili.com/video/BV1mt4y1R75Q Adobe Premiere Pro 2022 教程&#xff1a; https://mp.weixin.qq.com/s/gwYXDCD_iCQTa78tlG6Puw Adobe premiere 安装包下载&…

SpringCloud Gateway(4.1.0) 返回503:原因分析与解决方案

文章目录 一、环境版本二、原因分析三、解决方案 一、环境版本 Versionspring-cloud-dependencies2023.0.0spring-cloud-starter-gateway4.1.0Nacosv2.3.0 二、原因分析 在 Spring Cloud Gateway 的早期版本中&#xff0c;Ribbon 被用作默认的负载均衡器。随着Spring Cloud的…

PHP的线程安全与非线程安全模式选哪个

曾经初学PHP的时候也很困惑对线程安全与非线程安全模式这块环境的选择&#xff0c;也未能理解其中意。近来无意中看到一个教程对线程安全&#xff08;饿汉式&#xff09;&#xff0c;非线程安全&#xff08;懒汉式&#xff09;的描述&#xff0c;虽然觉得现在已经能够很明了透彻…