【C++面向对象】1. 类、对象

文章目录

  • 【 1. 类 & 对象的定义 】
    • 1.1 类的定义
    • 1.2 对象的定义
  • 【 2. 类的成员 】
    • 2.1 数据成员
    • 2.2 成员函数
      • 类的内部定义成员函数
      • 类的外部定义成员函数
      • 成员函数的访问
      • 实例
  • 【 3. 类的访问修饰符 】
    • 3.1 public 公有成员
    • 3.2 private 私有成员
    • 3.3 protected 保护成员
    • 3.4 继承中的访问修饰符特点

  • C++ 在 C 语言的基础上增加了面向对象编程,C++ 支持面向对象程序设计。 是 C++面向对象 的核心特性,通常被称为用户定义的类型。
  • 类用于指定对象的形式,它包含了 数据表示法 和用于处理数据的 方法。类中的数据和方法称为类的 成员。函数在一个类中被称为类的成员。

【 1. 类 & 对象的定义 】

1.1 类的定义

  • 定义一个类,本质上是定义一个数据类型的蓝图。这实际上并没有定义任何数据,但它定义了类的名称意味着什么,也就是说,它定义了类的对象包括了什么,以及可以在这个对象上执行哪些操作。
  • 类定义是以关键字 class 开头,后跟类的名称。类的主体是包含在一对花括号中,类定义后必须跟着一个分号或一个声明列表。例如,我们使用关键字 class 定义 Box 数据类型,如下所示:
class Box
{public:double length;   // 盒子的长度double breadth;  // 盒子的宽度double height;   // 盒子的高度
};
  • 关键字 public 确定了类成员的访问属性。 在类对象作用域内,public 公共成员在类的外部是可访问的 。您也可以指定类的成员为 private 或 protected,这个我们稍后会进行讲解。

1.2 对象的定义

  • 类提供了对象的蓝图,所以基本上,对象是根据类来创建的。声明类的对象,就像声明基本类型的变量一样。下面的语句声明了类 Box 的两个对象,对象 Box1 和 Box2 都有它们各自的数据成员:
Box Box1;          // 声明 Box1,类型为 Box
Box Box2;          // 声明 Box2,类型为 Box

【 2. 类的成员 】

2.1 数据成员

  • 类的对象的公共数据成员可以使用直接成员访问运算符即小数点 . 来访问。私有的成员和受保护的成员不能使用直接成员访问运算符 . 来直接访问。
  • 实例:
#include <iostream>using namespace std;class Box
{public:double length;   // 长度double breadth;  // 宽度double height;   // 高度
};int main( )
{Box Box1;        // 声明 Box1,类型为 BoxBox Box2;        // 声明 Box2,类型为 Boxdouble volume = 0.0;     // 用于存储体积// box 1 详述Box1.height = 5.0; Box1.length = 6.0; Box1.breadth = 7.0;// box 2 详述Box2.height = 10.0;Box2.length = 12.0;Box2.breadth = 13.0;// box 1 的体积volume = Box1.height * Box1.length * Box1.breadth;cout << "Box1 的体积:" << volume <<endl;// box 2 的体积volume = Box2.height * Box2.length * Box2.breadth;cout << "Box2 的体积:" << volume <<endl;return 0;
}

在这里插入图片描述

2.2 成员函数

  • 类的成员函数是指那些把定义和原型写在类定义内部的函数,就像类定义中的其他变量一样。
  • 类的成员函数是类的一个成员,它可以操作类的任意对象,可以访问对象中的所有成员。

类的内部定义成员函数

  • 在类定义中定义的成员函数默认把函数声明为 内联 的 ,可以不使用 inline 标识符
  • 实例,在 Box类 的内部定义 getVolume() 函数:
class Box
{public:double length;      // 长度double breadth;     // 宽度double height;      // 高度double getVolume(void){return length * breadth * height;}
};

类的外部定义成员函数

  • 在类的外部使用 范围解析运算符 :: 定义成员函数,在 :: 运算符之前必须使用类名。
  • 实例:在 Box类 的外部定义 getVolume() 函数
double Box::getVolume(void)
{return length * breadth * height;
}

成员函数的访问

  • 调用成员函数是在对象上使用点运算符(.),这样它就能操作与该对象相关的数据,
  • 实例
Box myBox;          // 创建一个对象myBox.getVolume();  // 调用该对象的成员函数

实例

#include <iostream>using namespace std;class Box
{public:double length;         // 长度double breadth;        // 宽度double height;         // 高度// 成员函数声明double getVolume(void);void setLength( double len );void setBreadth( double bre );void setHeight( double hei ){height = hei;}
};// 成员函数定义
double Box::getVolume(void)
{return length * breadth * height;
}void Box::setLength( double len )
{length = len;
}void Box::setBreadth( double bre )
{breadth = bre;
}// 程序的主函数
int main( )
{Box Box1;                // 声明 Box1,类型为 Boxdouble volume = 0.0;     // 用于存储体积// box 1 详述Box1.setLength(6.0); Box1.setBreadth(7.0); Box1.setHeight(5.0);// box 1 的体积volume = Box1.getVolume();cout << "Box1 的体积:" << volume <<endl;return 0;
}

在这里插入图片描述

【 3. 类的访问修饰符 】

  • 数据封装是面向对象编程的一个重要特点,它防止函数直接访问类类型的内部成员。类成员的 访问限制 是通过在类主体内部对各个区域标记 public、private、protected 来指定的。关键字 public、private、protected 称为访问修饰符。
  • 一个类可以有多个 public、protected 或 private 标记区域。每个标记区域在下一个标记区域开始之前或者在遇到类主体结束右括号之前都是有效的。成员和类的 默认访问修饰符是 private
  • 实例
class Base {public:// 公有成员protected:// 受保护成员private:// 私有成员};

3.1 public 公有成员

  • 公有成员在程序中类的外部是可访问的。我们可以不使用任何成员函数来 直接设置和获取公有变量的值。
  • 实例:
#include <iostream>using namespace std;class Line
{public:double length;void setLength( double len );double getLength( void );
};// 成员函数定义
double Line::getLength(void)
{return length ;
}void Line::setLength( double len )
{length = len;
}// 程序的主函数
int main( )
{Line line;// 设置长度line.setLength(6.0); cout << "Length of line : " << line.getLength() <<endl;// 不使用成员函数设置长度line.length = 10.0; // OK: 因为 length 是公有的cout << "Length of line : " << line.length <<endl;return 0;
}

在这里插入图片描述

3.2 private 私有成员

  • 私有成员变量或函数在类的外部是不可访问的,甚至是不可查看的。只有类和友元函数可以访问私有成员。

  • 默认情况下(没有使用任何访问修饰符时),类的所有成员都是私有的。如下所示:width 是 私有的。

class Box
{double width;public:double length;void setWidth( double wid );double getWidth( void );
};
  • 实际操作中,我们 一般会在私有区域定义数据,在公有区域定义相关的函数,以便在类的外部也可以调用这些函数。
#include <iostream>using namespace std;class Box
{public:double length;void setWidth( double wid );double getWidth( void );private:double width;
};// 成员函数定义
double Box::getWidth(void)
{return width ;
}void Box::setWidth( double wid )
{width = wid;
}// 程序的主函数
int main( )
{Box box;// 不使用成员函数设置长度box.length = 10.0; // OK: 因为 length 是公有的cout << "Length of box : " << box.length <<endl;// 不使用成员函数设置宽度// box.width = 10.0; // Error: 因为 width 是私有的box.setWidth(10.0);  // 使用成员函数设置宽度cout << "Width of box : " << box.getWidth() <<endl;return 0;
}

在这里插入图片描述

3.3 protected 保护成员

  • 保护成员变量或函数与私有成员十分相似,但有一点不同,即 public 保护成员在派生类(即子类)中是可访问的
  • 实例:从父类 Box 派生了一个子类 smallBox, width 成员可被派生类 smallBox 的任何成员函数访问。
#include <iostream>
using namespace std;class Box
{protected:double width;
};class SmallBox:Box // SmallBox 是派生类
{public:void setSmallWidth( double wid );double getSmallWidth( void );
};// 子类的成员函数
double SmallBox::getSmallWidth(void)
{return width ;
}void SmallBox::setSmallWidth( double wid )
{width = wid;
}// 程序的主函数
int main( )
{SmallBox box;// 使用成员函数设置宽度box.setSmallWidth(5.0);cout << "Width of box : "<< box.getSmallWidth() << endl;return 0;
}

在这里插入图片描述

3.4 继承中的访问修饰符特点

  • 共有public, protected, private三种继承方式,它们相应地改变了基类成员的访问属性。
基类 成员的访问属性派生 成员的访问属性
public继承public → public
private → private
protected → protected
private 继承public → private
private → private
protected → private
protected 继承public → protected
private → private
protected → protected
  • 但无论哪种继承方式,有两点都没有改变:
    • private 成员只能被本类成员(类内)和友元访问,不能被派生类访问;
    • protected 成员可以被派生类访问。

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

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

相关文章

【离线/并查集】CF1213 G

想起来好久没写题解了&#xff0c;随便写一下把 感觉写多了div3后面的题就变得简单了&#xff0c;div3似乎没什么思维含量&#xff0c;甚至有时候能开出div3的2100.... 心血来潮写一下这个*1800的题解&#xff0c;思路一下就出了&#xff0c;但是一开始多了个log被卡了&#x…

【R】数据相关性的可视化

一千零一技|相关性分析及其可视化&#xff1a;copy&paste&#xff0c;搞定 .libPaths(c("/bioinfo/home/software/miniconda3/envs/R4.0/lib/R/library")) #data("mtcars") library("PerformanceAnalytics") # pdf("test.pdf") #…

惊艳!这些独特的搜索引擎你都知道吗?

随着互联网的普及和发展&#xff0c;搜索引擎已经成为我们日常获取信息的重要工具。然而&#xff0c;当我们想要寻找一些特定类型的信息时&#xff0c;普通的搜索引擎可能无法满足我们的需求。这时&#xff0c;一些特殊的搜索引擎便能派上用场本。 文将介绍几种常用的特殊搜索引…

EDID详解

文章目录 字节含义一些概念YCC位 文章目录 字节含义一些概念YCC位 字节含义 EDID通常由128个字节组成&#xff0c;这些字节提供了关于显示器的各种详细信息。以下是EDID中每个字节位表示的一般含义&#xff1a; Header&#xff08;头部&#xff09;: 字节0: Header&#xff…

hue实现对hiveserver2 的负载均衡

如果你使用的是CDH集群那就很是方便的 在Cloudera Manager中&#xff0c;进入HDFS Service 进入Instances标签页面&#xff0c;点击Add Role Instances按钮&#xff0c;如下图所示 点击Continue按钮&#xff0c;如下图所示 返回Instances页面&#xff0c;选择HttpFS角色…

【MyBatis】mvc模式以及Mapper文件中的namespace以及ORM思想

目录 什么是MVC三层架构&#xff0c;初步了解&#xff1f; namespace的作用是什么&#xff1f; Mapper文件中的namespace&#xff1f; ORM思想&#xff08;对象关系映射思想&#xff09; 其中提供了一套映射规则和API 什么是MVC三层架构&#xff0c;初步了解&#xff1f; 三…

9.构造器与垃圾收集器 对象的前世今生

9.1 对象与变量的生存空间 栈与堆&#xff1a;生存空间 在Java中&#xff0c;程序员会在乎内存中的两种区域&#xff1a;对象的生存空间堆&#xff08;heap&#xff09;和方法调用及变量的生存空间&#xff08;stack&#xff09;。当Java虚拟机启动时&#xff0c;它会从底层的…

【Netty专题】【网络编程】从OSI、TCP/IP网络模型开始到BIO、NIO(Netty前置知识)

目录 前言前置知识一、计算机网络体系结构二、TCP/IP协议族2.1 简介*2.2 TCP/IP网络传输中的数据2.3 地址和端口号2.4 小总结 三、TCP/UDP特性3.1 TCP特性TCP 3次握手TCP 4次挥手TCP头部结构体 3.2 UDP特性 四、总结 课程内容一、网络通信编程基础知识1.1 什么是Socket1.2 长连…

软件工程与计算总结(十七)软件构造

一.概述 1.定义 软件构造是以编程为主的活动&#xff0c;类似于软件实现。但软件构造又不止编程这么简单&#xff0c;除了核心的编程任务之外&#xff0c;还设计详细设计&#xff08;数据结构与算法设计&#xff09;、单元测试、集成与集成测试以及其他活动~ 2.软件构造是设计…

简单谈谈我参加数据分析省赛的感受与体会

数据分析省赛的感受与体会 概要考试前的感受与体会考试注意事项小结 概要 大数据分析省赛指的是在省级范围内举办的大数据分析竞赛活动。该竞赛旨在鼓励和推动大数据分析领域的技术创新和人才培养&#xff0c;促进大数据技术与应用的深度融合&#xff0c;切实解决实际问题。参…

Android中级——MVVM

MVVM MVVM是什么&#xff1f;MVVM实现前提ModelViewModelView MVVM是什么&#xff1f; Model-View-ViewMode架构&#xff0c;可看作MVP改进版&#xff0c;将此前Presenter的逻辑操作交给ViewMode中的Binder去处理 Mode&#xff1a;封装数据存储及相关操作逻辑&#xff0c;与MV…

Kali Linux 安装搭建 hadoop 平台 详细教程

1&#xff09;前期环境准备&#xff1a;&#xff08;虚拟机、jdk、ssh&#xff09; 2&#xff09;SSH相关配置 安装SSH Server服务器&#xff1a;apt-get install openssh-server 更改默认的SSH密钥 cd /etc/ssh mkdir ssh_key_backup mv ssh_host_* ssh_key_backup 创建新…

【C++进阶(八)】C++继承深度剖析

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:C从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习C   &#x1f51d;&#x1f51d; 继承 1. 前言2. 继承的基本概念3. 继承关系和访…

酷开会员值得回味的经典老剧还记得吗?酷开系统家庭影院带你重温

那些年&#xff0c;大家的娱乐生活主要集中在那一台9寸的黑白电视机中&#xff1b;那些年&#xff0c;家家户户的孩子们晚上都会聚到电视机前欢声笑语&#xff1b;那些年&#xff0c;是诸多经典的电视剧陪伴了很多人的闲暇时光……那些年陪伴我们成长&#xff0c;在记忆中熠熠生…

下笔如有神:用VS Code写markdown

文章目录 Markdown All in One快捷键指令 输出PDFMarkdown Preview Enhancedmarkdown基本语法 Markdown All in One VS Coode中最推荐的Markdown插件是Markdown All in One&#xff0c;下文简称为mdAIO。千万别搜完markdown后下一个叫Markdown的插件&#xff0c;这个插件的名字…

新年学新语言Go之四

一、前言 任何编程语言都有类型系统&#xff0c;类型系统解决了数据的存取问题&#xff0c;它决定了使用这个类型需要开辟内存空间大小以及数据是如何存放的&#xff0c;也解决如何读出数据&#xff0c;因为在内存中相同二进制值不同类型的含义是不一样的&#xff0c;关于Go基…

Oracle的立场:官网更换首页与以色列站在一起

Oracle公司的官网&#xff0c;更换了首页内容&#xff0c;明确表明立场&#xff1a;Oracle与以色列站在一起。 声明指出&#xff1a; Oracle谴责针对以色列及其公民的恐怖袭击。Oracle将为其员工、以色列政府和国防机构提供一切必要的支持。 Magen David Adom是一家为以色列公民…

1024,毕业后工作的五个月

入职 一晃一下又到了1024&#xff0c;彼时已经成为打工人在写分享了&#xff0c;自己已经搬砖5个月了&#xff0c;总感觉4月份拍毕业照、去川渝毕业旅行看plmm还是在昨天&#xff0c;但五月下旬入职到现在已经5个月了。给大家简单的share一下工作和生活。 在5月初光速毁约ks入…

《数据结构、算法与应用C++语言描述》使用C++语言实现数组队列

《数据结构、算法与应用C语言描述》使用C语言实现数组队列 定义 队列的定义 队列&#xff08;queue&#xff09;是一个线性表&#xff0c;其插入和删除操作分别在表的不同端进行。插入元素的那一端称为队尾&#xff08;back或rear&#xff09;&#xff0c;删除元素的那一端称…

在 Python 3 中释放 LightGBM 的力量:您的机器学习大师之路

机器学习是 Python 占据主导地位的领域,它一直在给全球各行各业带来革命性的变化。要在这个不断变化的环境中脱颖而出,掌握正确的工具是关键。LightGBM 就是这样一个工具,它是一个强大且快速的梯度提升框架。在这份综合指南中,我们将通过实际示例和示例数据集从基础知识到高…