类的定义与实例化

news2024/12/26 21:55:47

一.类的定义

1.1 格式

        定义类的一般格式如下:

class  类名{
public:
    公有成员列表;
protected:
    保护成员列表;
private:
    私有成员列表;
};

         构成元素:

(1)类头(class head)

        “class 类名”称为类头。

(2)类体(class body)

        花括号{ }中的部分称为类体(class body).

(3)类成员表(class member list)

        类体中定义了类成员表。

 1.2 访问限定符

        访问限定符有三种,如表1所示。

序号访问限定符作用
1public表示公共的,外部可访问其成员
2protected表示保护的,外部不能访问其成员
3private表示私有的,外部不能访问其成员

        如果在类体起始点无访问限定符,系统默认定义为private。

1.3 注意事项

1.类是一种数据类型,定义时系统不为类分配存储空间,所以不能对类的数据成员初始化。

2.类中的任何数据成员也不能使用关键字extern、auto或register限定其存储类型。

3.成员函数可以直接使用类定义中的任一成员,可以处理数据成员,也可调用函数成员。

1.4 成员函数的定义

1.4.1 类内定义

        直接在类体内定义函数。如下图所示。

1.4.2 类外定义

        在类体内声明函数,在类外定义函数。类外定义函数时,使用以下格式:

返回值类型 类名::函数名(参数表)
{
    ……
}

           其中运算符“::”称为作用域解析运算符,它指出该函数是属于哪一个类的成员函数。如下图所示:

二.类的实例化——对象

        对象是类的实例。

2.1 创建方式

        有两种方法创建对象。

2.1.1 静态创建

        即在编译程序时创建。例如,

class CStudent
{
public:
	void set_age(int val);
	int get_age(void);
private:
	char name[50];
	int age;	
};

int main(int argc, char** argv) {
	
	CStudent stu;//直接实例化对象

	return 0;
}

2.1.2 动态创建

        即在程序运行时创建。使用new创建。例如:

#include <iostream>
using namespace std;

class CStudent
{
public:
	void set_age(int val);
	int get_age(void);
private:
	char name[50];
	int age;	
};


int main(int argc, char** argv) {
	
	CStudent *pstu = new CStudent();
	
	delete pstu;
	
	return 0;
}

2.2 对象的存储方式

        有两种方式存储对象。

2.2.1 数据和函数都独立存储

        当在类内定义函数时,系统会为每个对象分配各自的“数据成员和函数成员”存储空间。如下图所示。

        这种方式会浪费内存空间。因为对象之间的属性(数据)有差异,但行为(函数)是一样的,这部分可以共用。

2.2.2 数据独立而函数共享存储

        当在类外定义函数时,系统会为每个对象分配各自的数据区,而成员函数区为各对象共用。如下图所示:

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

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

相关文章

Java学习记录第十三天

面向对象编程 核心思想就是OOP&#xff08;面向对象编程&#xff09; 面向过程&面向对象 面向过程思想 步骤清晰简单&#xff0c;第一步做什么&#xff0c;第二步做什么... 面对过程适合处理一些较为简单的问题 面向对象思想 物以类聚&#xff0c;分类的思维模式&…

Docker常见软件部署2

1 docker 安装redis集群 docker 安装redis集群&#xff0c;3主3从的配置。 1 创建一个redis通信网卡 #创建一个redis集群使用的网卡 docker network create redis --subnet 172.38.0.0/16 2 创建6个redis的配置文件 #通过脚本创建六个redis配置&#xff0c;复制下面命令直接…

VTK——自定义二维图像涂抹Widget(支持任意值涂抹),擦除,恢复 vtkCustomPaintWidget

通过鼠标控制 涂抹区域&#xff0c;可以进行&#xff0c;后退&#xff0c;可以进行二维标注&#xff0c;也可以进行回退&#xff0c;也可以任意值涂抹。 vtkCustomPaintWidget 1.标注&#xff1a; 2.擦除 视频&#xff1a; 2D标注 vtkPaint VTK 2D 标注 描绘 2D 擦除&#x…

酒店能源监测管理系统:实现节能减排与提升管理效率的利器

随着全球能源问题的日益突出和可持续发展理念的深入人心&#xff0c;酒店业也在积极探索节能减排的途径。在这一背景下&#xff0c;酒店能源监测管理系统应运而生&#xff0c;成为了酒店行业提升管理效率、降低能源消耗的重要工具。本文将从多个角度介绍酒店能源监测管理系统的…

QT控件之显示控件

Qt Designer显示窗口部件提供的面板中&#xff0c;提供了10种显示小部件 &#xff08;1&#xff09; Label标签 &#xff08;2&#xff09; Text Browser文本浏览器 &#xff08;3&#xff09; Graphics View图形视图 &#xff08;4&#xff09; Calendar Widget日历 &…

【Pytorch入门】小土堆PyTorch入门教程完整学习笔记(详细笔记并附练习代码 ipynb文件)

小土堆PyTorch入门教程笔记 最近在观看PyTorch深度学习快速入门教程&#xff08;绝对通俗易懂&#xff01;&#xff09;【小土堆】顺便做点笔记&#xff0c;方便回看&#xff0c;同时也希望记录的笔记能够帮助到更多在入门的小伙伴~ 【注】仅记录个人觉得重要的知识&#xff0c…

Java项目:79 springboot海滨体育馆管理系统的设计与实现

作者主页&#xff1a;源码空间codegym 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 体育馆管理系统主要实现了管理员功能模块和学生功能模块两大部分 管理员功能模块&#xff1a; 管理员登录后可对系统进行全面管理操作&#…

android安卓看书APP课设

一、引言 随着移动设备的普及和网络的发展&#xff0c;手机阅读成为了现代人获取知识和娱乐的重要途径之一。为了满足用户的阅读需求&#xff0c;我们设计并开发了一款安卓看书APP。本文将介绍该APP的设计理念、功能特点以及技术实现。 二、功能描述 1. 主页底部导航栏 为了…

免费|Python|【需求响应】一种新的需求响应机制DR-VCG研究

目录 1 主要内容 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序对应文章《Contract Design for Energy Demand Response》&#xff0c;电力系统需求响应&#xff08;DR&#xff09;用来调节用户对电能的需求&#xff0c;即在预测的需求高于电能供应时&#xff0c;希…

rtthread studio 基于bsp生成代码stm32l475正点原子潘多拉,以及硬件配置

1、基于bsp生成代码 rtthread studio 很强大的一个功能就是可以根据芯片或者bsp 生成驱动代码&#xff0c;而且rtthread内核 已经集成到了代码中&#xff01;&#xff01;只需要关注于如何使用硬件和设备完成我们想要的功能就可以&#xff1b; 它的官网文档也特别详细&#x…

银行监管报送系统介绍(十二):非居民金融账户涉税信息报送

国家税务总局、财政部、中国人民银行、中国银行业监督管理委员会、中国证券监督管理委员会、国家金融监督管理总局2017年5月9日发布、2017年7月1日起施行的《非居民金融账户涉税信息尽职调查管理办法》。 一、《管理办法》出台的背景是什么&#xff1f;   受二十国集团&…

算法---动态规划练习-8(打家劫舍2)

打家劫舍2 1. 题目解析2. 讲解算法原理3. 编写代码 1. 题目解析 题目地址&#xff1a;点这里 2. 讲解算法原理 首先&#xff0c;给定一个非负整数数组 nums&#xff0c;其中 nums[i] 表示第 i 家的财物价值。 定义两个辅助数组 f 和 g&#xff0c;长度都为 n&#xff08;n 是…

Java智慧工地源码 智慧工地的价值体现 开发一套智慧工地系统需要多少钱

智慧工地是智慧地球理念在工程领域的行业具现&#xff0c;是一种崭新的工程全生命周期管理理念。它运用信息化手段&#xff0c;通过三维设计平台对工程项目进行精确设计和施工模拟&#xff0c;围绕施工过程管理&#xff0c;建立互联协同、智能生产、科学管理的施工项目信息化生…

亲身体验!人工智能对话无障碍 —— BRClient 使用指南

01 概述 BRClient 这个名字来源于“Bedrock Client”的简称&#xff0c;寓意是为用户提供一个坚实的基础。BRClient 作为一个开源的桌面应用&#xff0c;为用户提供了友好的图形界面&#xff0c;让每个人都能够轻松访问和使用 Claude 3 的强大功能。用户可以自定义 Claude 3 的…

2024 ccfcsp认证打卡 2023 03 01 田地丈量

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in new Scanner(System.in);int n in.nextInt(); // 输入 n&#xff0c;表示矩形的数量int a in.nextInt(); // 输入 a&#xff0c;表示整个区域的长度int b in.nextInt()…

Web Components初探

组件化&#xff0c;标签语义化&#xff0c;是前端发展的趋势。现在流行的组件化框架有React、Vue等&#xff0c;标签语义化在H5中添加的article、dialog等。 Web Components 就是类似的一套技术&#xff0c;允许您创建可重用的定制元素&#xff0c;并且在您的web应用中使用它们…

python外网下载指定库导入内网的方法

前提&#xff1a;保持内网python版本和外网python版本一致 1.外网电脑上新建一个空文件夹&#xff0c;用于存放下载下来的库&#xff0c;cmd窗口中输入命令pip install 库名 -target下载的库存放的路径&#xff0c;则会将对应库下载到指定文件夹下 2.将该文件夹下内容拷贝内网…

Git_常用命令+代码冲突解决方案

文章目录 基本命令的使用查看git的当前版本初始化配置设置用户名及邮箱设置仓库的认证方式查看当前配置 创建仓库从远程服务器克隆仓库创建本地仓库 添加和提交文件工作区域和文件状态工作区域文件状态 查看文件状态及分支信息查看暂存区的内容添加文件提交文件查看提交日志回退…

贝锐蒲公英虚拟DMZ:工业设备异地组网,解决网段冲突难题

虚拟DMZ 产品/技术的原理传统DMZ&#xff1a; DMZ中文名称为“隔离区”&#xff0c;也称“非军事化区”&#xff1b;它是为解决安装防火墙后外部网络不能访问内部网络服务器的问题。网关DMZ功能开启后&#xff0c; 将内网的一台服务器完全暴露在外网&#xff08;内网某个IP绑…

Redis入门到实战-第二十二弹

Redis实战热身Sentinel篇 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://redis.io/Redis概述 Redis是一个开源的&#xff08;采用BSD许可证&#xff09;&#xff0c;用作数据库、缓存、消息代理和流处理引擎的内存…