C++--类的定义

在这里插入图片描述

一.类的定义


class 类名 
{
private:成员属性或成员函数
protected:成员属性或成员函数
public:成员属性或成员函数
};

补充:

(1)class是声明类的关键字,class后跟类名。类名一般首字母大写。
(2)类包括成员属性和成员函数。成员属性代表对象的属性;成员函数实现对象的行为。
(3)privateprotectedpublic关键字称为访问权限符,它规定了类中成员的访问属性。这3个关键字可以按任意顺序出现。默认时为私有的(private)

【例3-1】 声明一个学生类。
分析:每个学生都有学号、姓名和性别;对于学生的基本操作有输入信息、输出信息等。因此,对应的学生类定义如下:

class Student //声明类
{
private: //访问权限:私有成员string m_id;   //属性,数据成员,表示学号string m_name; //属性,数据成员,表示姓名string m_sex;  //属性,数据成员,表示性别
public:  //访问权限:公有成员Student();     //行为,成员函数的原型声明,表示构造函数void input();  //行为,成员函数的原型声明,表示输入学生信息void print();  //行为,成员函数的原型声明,表示输出学生信息
}; //类声明结束

二. 成员访问权限

可以定义3种不同的访问权限符,分别为public(公有类型)、private(私有类型)和protected(保护类型)

public(公有类型)

public 声明成员为公有成员。完全公开。都可以访问

class Human
{
public: //声明类的公有成员int high; //身高int weight;//体重void GetHigh(){cout<<"身高:"<<high<<endl;}void GetWeight(){cout<<"体重:"<<weight<<endl;}
};int main()
{Human zhangsan;       //定义类的对象zhangsan.high=175;    //通过对象访问类的公有数据成员zhangsan.weight=70;   //通过对象访问类的公有数据成员zhangsan.GetHigh();   //通过对象访问类的公有成员函数zhangsan.GetWeight(); //通过对象访问类的公有成员函数return 0;
}

private(私有类型)

private声明成员为私有成员。该级别的成员只能被它所在类中的成员函数和该类的友元函数访问。

class Human
{
private: //声明类的私有数据成员int high; //身高int weight;//体重
public: //声明类的公有成员函数void SetHigh(int h){high = h; //类的成员函数访问类的私有数据成员}void GetHigh(){cout << "身高:" << high << endl; //类的成员函数访问类的私有数据成员}void SetWeight(int w){weight = w; //类的成员函数访问类的私有数据成员}void GetWeight(){cout << "体重:" << weight << endl; //类的成员函数访问类的私有数据成员}
};int main()
{Human lisi; //定义类的对象//lisi.high=185; //错误,不能通过对象访问类的私有数据成员//lisi.weight=90; //错误,不能通过对象访问类的私有数据成员lisi.SetHigh(180); //通过对象访问类的公有成员函数给high赋值lisi.SetWeight(80); //通过对象访问类的公有成员函数给Weight赋值lisi.GetHigh(); //通过对象访问类的公有成员函数lisi.GetWeight(); //通过对象访问类的公有成员函数return 0;
}

从上例可知,private成员只能在类的成员函数中使用。在类外,不能通过对象访问,如lisi.high=185;和lisi.weight=90;都是错误的。

protected(保护类型)

protected声明成员为保护成员。具有这个访问控制级别的成员,外界是无法直接访问的。它只能被它所在类及从该类派生的子类的成员函数及友元函数访问。它和private的区别只在类继承时体现。

在这里插入图片描述

三.成员函数实现方式

类的成员函数也是函数的一种。它与一般函数的区别是:它属于一个特定的类,是类的一个成员。
在使用类的成员函数时,要注意它的访问权限(它能否被访问),以及它的作用域(类函数能在什么范围内被访问)。

类的成员函数的定义方式有两种。

  • 第一种是在类内直接进行定义。这种方式一般用在代码比较少的成员函数中,并自动成内联函数。

  • 第二种是在类中进行函数说明,在类外进行函数定义。这种情况通常用在代码较多的类的成员函数上。在定义函数时,必须用作用域符“::”表明函数所属的类。

形式如下:

返回类型 类名::函数名(参数列表)
{//函数体
}

例如定义时钟类:

#include <iostream>
using namespace std;
class Clock
{
private:int hour; //小时int minute;//分钟int second;//秒
public:void setTime(int h,int m,int s); //类中声明,类外定义void showTime() //类中定义函数{cout<<hour<< "时"<<minute<<"分"<<second<<"秒"<<endl;}
};void Clock::setTime(int h,int m,int s) //定义成员函数
{hour=h;minute=m;second=s;
}int main()
{Clock cc;cc.setTime(8,10,20);cc.showTime();return 0;
}

本片完!

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

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

相关文章

怎样在Linux搭建NTP服务器

搭建 NTP&#xff08;Network Time Protocol&#xff09;服务器可以帮助你在局域网内提供时间同步服务&#xff0c;让网络中的设备都使用统一的时间。以下是在 Linux 系统上搭建 NTP 服务器的基本步骤&#xff1a; 安装 NTP 服务器软件&#xff1a; 在终端中执行以下命令安装 N…

【爬虫框架Scrapy】02 Scrapy入门案例

接下来介绍一个简单的项目&#xff0c;完成一遍 Scrapy 抓取流程。通过这个过程&#xff0c;我们可以对 Scrapy 的基本用法和原理有大体了解。 1. 本节目标 本节要完成的任务如下。 创建一个 Scrapy 项目。 创建一个 Spider 来抓取站点和处理数据。 通过命令行将抓取的内容…

Gemini即将收费,GPT无需注册?GPT3.5白嫖和升级教程

&#x1f310;Gemini 即将开始收费 开发者“白嫖”的好日子到头了 - Gemini将开始收费&#xff0c;影响使用Google AI for Developers提供的Gemini API的用户。 - Gemini API将引入按量付费定价&#xff0c;需要注意新的服务条款。 - 用户需在5月2日之前停止使用Gemini API和Go…

redis事务(redis features)

redis支持事务&#xff0c;也就是可以在一次请求中执行多个命令。redis中的事务主要是通过MULTI和EXEC这两个命令来实现的。 MULTI命令用来开启一个事务&#xff0c;事务开启之后&#xff0c;所有的命令就都会被放入到一个队列中&#xff0c;最后通过一个EXEC命令来执行事务中…

【现代C++】委托构造函数

现代C中的委托构造函数&#xff08;Delegating Constructors&#xff09;是C11引入的特性&#xff0c;它允许一个构造函数调用同一个类中的另一个构造函数&#xff0c;以避免代码重复。这种特性在初始化对象时提高了代码的复用性和清晰性。 1. 基本用法 在同一个类中&#xf…

dhcp中继代理

不同过路由器分配ip了&#xff0c;通过一台服务器来代替&#xff0c;路由器充当中继代理功能&#xff0c;如下图 服务器地址&#xff1a;172.10.1.1/24 配置流程&#xff1a; 1.使能dhcp功能 2.各个接口网关地址&#xff0c;配置dhcp中继功能 dhcp select relay &#xff0…

Markdown介绍

一.Markdown基本介绍&#x1f357; Markdown 是一种轻量级标记语言&#xff0c;用于简单、易读易写的文本格式编写。它设计初衷是让人们能够使用普通文本编辑器编写格式简单的文档&#xff0c;并且可以转换成有效的HTML。Markdown 的语法非常简洁直观&#xff0c;通过使用特定…

VS2022配置boost库-Windows为例

1. boost库下载 1&#xff09;下载boost库源码&#xff1a;https://www.boost.org/ 2&#xff09;以1.81版本为例&#xff0c;安装包如下 3&#xff09;下载后解压 比如我是放在E盘下面的boost文件夹 2. 安装配置 1&#xff09;打开VS2022命令行 2&#xff09;切换安装…

OpenHarmony实战:Makefile方式组织编译的库移植

以yxml库为例&#xff0c;其移植过程如下文所示。 源码获取 从仓库获取yxml源码&#xff0c;其目录结构如下表&#xff1a; 表1 源码目录结构 名称描述yxml/bench/benchmark相关代码yxml/test/测试输入输出文件&#xff0c;及测试脚本yxml/Makefile编译组织文件yxml/.gitat…

nginx配置多vue项目

1. 找到linux docker安装好的nginx目录文件 进入nginx内 把打包好的vue项目放在html文件下 如上 三个文件夹下对应着三个不同的vue项目 2. 配置default.conf的配置文件&#xff0c; 一个nginx配置文件可以多个项目进行代理 进入到conf 找到conf.d下面的default.conf 文件…

解决虚拟机centos8无法连接外网,ping: www.baidu.com: 未知的名称或服务

设置的虚拟机刚开还是好好的&#xff0c;改完hostname重启后就连不上网了 ping百度时显示未知的名称或服务。 1.找到虚拟机的IP(NAT模式的) 编辑-->虚拟网络编辑器 可以看到我的子网IP为192.168.47.0 2.编辑网络配置文件 vim /etc/sysconfig/network-scripts/ifcfg-XXXXX…

配置vite配置文件更改项目端口、使用@别名

一、配置vite配置文件更改项目端口 vite官方文档地址&#xff1a;开发服务器选项 | Vite 官方中文文档 (vitejs.dev) 使用&#xff1a; 二、使用别名 1. 安装 types/node types/node 包允许您在TypeScript项目中使用Node.js的核心模块和API&#xff0c;并提供了对它们的类型…