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

news2024/9/21 14:36:20

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

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

抽象

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

封装

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

继承

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

多态

多态是指一段程序能够处理多种类型对象的能力,函数重载就是实现多态的一种手段。在 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.2
    return 0;
}

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

idea/webstorm 创建Vue实例 Unresolved type Vue 处理方法

1.电脑本地安装node.js 官网下载 2. 其他: 未排除变量,前期试错(以下步骤配置了,但不确定对解决问题是否有帮助)

第 10 章:在C++中使用协程进行系统编程

最后一章专门介绍了一项对系统编程非常有用的功能&#xff0c;但这在C标准中相对较新。协程对象迅速找到了应用&#xff0c;成为了一等公民的状态机对象。它们的强大之处在于隐藏了协程帧后面的逻辑。请注意&#xff0c;这是一个高级主题&#xff0c;且C的协程接口既不简单也不…

216961-98-7,BODIPY 493/503 NHS 活化酯,可以应用于分子生物学等领域中

您好&#xff0c;欢迎来到新研之家 文章关键词&#xff1a;216961-98-7&#xff0c;BODIPY 493/503 NHS 活化酯&#xff0c;BODIPY 493/503 NHS ester&#xff0c;BODIPY 493/503 SE 一、基本信息 产品简介&#xff1a;BODIPY 493/503 NHS ester是一种特殊的染料&#xff0c…

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

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

02、全文检索 ------ Solr(企业级的开源的搜索引擎) 的下载、安装、Solr的Web图形界面介绍

目录 Solr 的下载和安装Solr的优势&#xff1a;Lucene与Solr 安装 Solr1、下载解压2、添加环境变量3、启动 Solr Solr 所支持的子命令&#xff1a;Solr 的 Core 和 Collection 介绍Solr 的Web控制台DashBoard&#xff08;仪表盘&#xff09;Logging&#xff08;日志&#xff09…

理想架构的高回退Doherty功率放大器理论与ADS仿真-Multistage

理想架构的高回退Doherty功率放大器理论与仿真-Multistage 参考&#xff1a; 三路Doherty设计 01 射频基础知识–基础概念 Switchmode RF and Microwave Power Amplifiers、 理想架构的Doherty功率放大器&#xff08;等分经典款&#xff09;的理论与ADS电流源仿真参考&#x…

《云原生安全攻防》-- 云原生安全概述

从本节课程开始&#xff0c;我们将正式踏上云原生安全的学习之旅。在深入探讨云原生安全的相关概念之前&#xff0c;让我们先对云原生有一个全面的认识。 什么是云原生呢? 云原生&#xff08;Cloud Native&#xff09;是一个组合词&#xff0c;我们把它拆分为云和原生两个词来…

TS项目实战一:流淌的字符动画界面

使用ts实现虚拟世界&#xff0c;创建ts项目&#xff0c;并编写ts代码&#xff0c;使用tsc编译后直接加载到html界面&#xff0c;实现类似黑客帝国中的流淌的代码界面的效果。 源码下载地址&#xff1a;点击下载 讲解视频 TS实战项目一&#xff1a;数字流界面项目创建 TS实战项…

LRU缓存(Leetcode146)

例题&#xff1a; 分析&#xff1a; 题目要求函数get和put要达到O(1)的时间复杂度&#xff0c;可以用 hashMap 来实现&#xff0c;因为要满足逐出最久未使用的元素的一个效果&#xff0c;还需要配合一个双向链表来共同实现。链表中的节点为一组key-value。 我们可以用双向链表来…

前端工程化之:webpack1-9(plugin)

一、plugin loader 的功能定位是转换代码&#xff0c;而一些其他的操作难以使用 loader 完成&#xff0c;比如&#xff1a; 当 webpack 生成文件时&#xff0c;顺便多生成一个说明描述文件&#xff1b;当 webpack 编译启动时&#xff0c;控制台输出一句话表示 webpack 启动了&…

Gas Hero Common Heroes NFT 概览与数据分析

作者&#xff1a;stellafootprint.network 编译&#xff1a;mingfootprint.network 数据源&#xff1a;Gas Hero Common Heroes NFT Collection Dashboard Gas Hero “盖世英雄” 是一个交互式的 Web3 策略游戏&#xff0c;强调社交互动&#xff0c;并与 FSL 生态系统集成…

THREE.JS动态场景开发实战【赛博朋克】

在本教程中&#xff0c;我们将探索如何创建类似 Three.js 的赛博朋克场景&#xff0c;灵感来自 Pipe 网站上的背景动画。 我们将指导你完成使用 Three.js 编码动态场景的过程&#xff0c;包括后处理效果和动态光照&#xff0c;所有这些都不需要任何着色器专业知识。 我用这个场…

自动保存知乎上点赞的内容至本地

背景&#xff1a;知乎上常有非常精彩的回答/文章&#xff0c;必须要点赞收藏&#xff0c;日后回想起该回答/文章时翻看自己的动态和收藏夹却怎么也找不到&#xff0c;即使之前保存了链接网络不好也打不开了&#xff08;。所以我一般碰到好的回答/文章都会想办法保存它的离线版本…

文件上传的另类应用

1.Imagemagick CVE-2016-3714 CVE-2022-44268 CVE-2020-29599可在vulhub靶场进行复现1.1.Imagemagick简介 ImageMagic是一款图片处理工具&#xff0c;当传入一个恶意图片时&#xff0c;就有可能存在命令注入漏洞。 ImageMagick默认支持一种图片格式mvg&#xff0c;而mvg与svg…

USTC ICS(2023Fall) Lab2 The PingPong Sequence

LC-3汇编语言 .ORIG x3000LDI R0,n ;f(n)NOT R0,R0ADD R0,R0,#1 ;取R0补码用于减法AND R1,R1,#0 ;R1记录循环次数,先初始化为0ADD R2,R1,#0 ;R2记录符号&#xff0c;加号为0,减号为-1,f(1)对应加号ADD R3,R1,#3 ;记录f(n),f(1)3AND R5,R5,#0 ;R5存0000 1111 1111 1111…

ubuntu20配置mysql8

首先更新软件包索引运行 sudo apt update命令。然后运行 sudo apt install mysql-server安装MySQL服务器。 安装完成后&#xff0c;MySQL服务将作为systemd服务自动启动。你可以运行 sudo systemctl status mysql命令验证MySQL服务器是否正在运行。 连接MySQL 当MySQL安装…

华为mate60 pro与小米14 pro 的巅峰对决

今天我们换下思路&#xff0c;不讲技术了&#xff01;我们一起讲讲手机&#xff01;小编暂时充当一下业余的数码咖。 今天我们就讲讲华为mate60 pro和小米14pro 这两款手机。这两款手机都是近期新出的发行版本&#xff0c;热度那是一直未减啊。 华为mate60 Pro 我们先说说这个…

gitlab-runner注册到gitlab时报错:ERROR: Registering runner... failed xxxxxxxx

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

CRG设计之时钟

1. 前言 CRG(Clock and Reset Generation&#xff0c;时钟复位生成模块) 模块扮演着关键角色。这个模块负责为整个系统提供稳定可靠的时钟信号&#xff0c;同时在系统上电或出现故障时生成复位信号&#xff0c;确保各个模块按预期运行。简而言之&#xff0c;CRG模块就像是SoC系…

Advanced CNN

文章目录 回顾Google NetInception1*1卷积Inception模块的实现网络构建完整代码 ResNet残差模块 Resedual Block残差网络的简单应用残差实现的代码 练习 回顾 这是一个简单的线性的卷积神经网络 然而有很多更为复杂的卷积神经网络。 Google Net Google Net 也叫Inception V…