C++中类的定义

news2024/9/19 23:54:57

一、类的定义格式

1、首先我们创建一个类:
#include<iostream>
using namespace std;

class Stack
{
	//公有的
public:
	//定义一个成员函数并给一个默认的缺省值
	void Init(int n = 6)
	{
		int* arr = (int*)malloc(sizeof(int) * n);
		if (arr == NULL)
		{
			perror("malloc");
			exit(1);
		}
		_capacity = n;
		_top = 0;
	}
	//私有的
	//定义成员变量
private:
	int* _arr;
	int _capacity;
	int _top;
};

class为定义类的关键字,Stack为类的名字,{}中的为类的主体,需要注意的是类的定义结束后最后的分号是不能省略的。

类中的内容称为类的成员:类中的变量称为类的属性或者成员变量、类中的函数称为类的方法或者成员函数。

可以看到在定义成员变量时,每个变量前面都加了 "_" ,这是定义成员变量时添加的一个特殊标识,主要是为了区分成员变量,该特殊标识不是强制性添加的,可以不加。

我们知到C++是完全兼容C的,所以在C中的大部分用法在C++中同样适用:比如struct的用法

只不过在C++中struct在使用中可以被升级成定义类的关键字,与class的用法相同,但是不推荐使用。

定义在类前面的成员函数默认为inline。

2、下面是我们之前使用C来push、top、destroy数据的过程
class Stack
{
	//共有的
public:
	//定义一个成员函数并给一个默认的缺省值
	void Init(int n = 6)
	{
		int* arr = (int*)malloc(sizeof(int) * n);
		if (arr == NULL)
		{
			perror("malloc");
			exit(1);
		}
		_capacity = n;
		_top = 0;
	}
	//再定义一些成员函数
	//插入数据
	void Push(int x)
	{
		//扩容
		_arr[_top++] = x;
	}
	//取顶部数据
	int Top()
	{
		assert(_top > 0);
		return _arr[_top - 1];
	}
	//销毁
	void Destroy()
	{
		free(_arr);
		_arr = nullptr;
		_capacity = _top = 0;
	}

	//私有的
	//定义成员变量
private:
	int* _arr;
	int _capacity;
	int _top;
};

int main()
{
    //调用初始化 插入 取数据 销毁函数
    
	return 0;
}
3、使用C++的方式来实现相关的方法
// 定义一个时间类
class Data
{
public:
	// 对这个类进行初始化操作
	// 可以全部给缺省值也可以都不给
	//void Init(int year = 1, int month = 1, int day = 1)
	void Init(int year , int month , int day )
	{
		year = _year;
		month = _month;
		day = _day;
	}


	// 定义类成员
private:
	int _year;
	int _month;
	int _day;

};
int main()
{
	Data d;
	d.Init(2024,9,14);
	return 0;
}

二、C++中的访问限定符

1、publice:修饰的成员可以在类外直接访问 公共的

2、private:修饰的成员不可以在类外访问 私有的

3、class定义的类中的成员在没有被访问限定符修饰时默认为private

4、struct定义的类中的成员在没有被访问限定符修饰时默认为public

作用域:它们的作用域都是从当前限定符开始一直到下一个限定符的出现,如果后面没有访问限定符那么就一直到遇到下一个}终止。

三、类域

类定义了一个新的作用域,类所有成员都在类的作用域中,在类外定义成员时,需要使用::作用域操作符指明成员属于哪个类域。

class Stack
{
public:
	void Init(int age = 18);
private:
	int _age;
};

void Init(int age)
{
	age = 18;
	cout << age << endl;
}
void Stack::Init(int age)
{
	age = 20;
	cout << age << endl;
}

int main()
{
	Stack st;
	st.Init();
}

可以看到最终的输出结果是20。这也就说明了类域影响的编译的查找规则,上面程序中的Init调用,编译器会输入被类域所影响的函数。

当我们单独调用Init函数时,编译器报错,参数太少。

说明这里的Init并不是上面类中定义的Init,而是被编译器认定为一个全局变量,在这个为指定的函数中是不能找到上述定义的成员变量的。

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

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

相关文章

ruby和python哪个好学

Ruby和python都挺好学的。建议学习Python&#xff0c;语法的话&#xff0c;Python相对更简洁。而且Python应用场合更广泛&#xff0c;运维、网站开发、数据处理、科学研究都可以。 Ruby和Python十分相似&#xff0c;有很多共同点&#xff0c;但也有一些不同之外&#xff0c;以…

视频提取文案,这5种方法让你轻松提取出来

视频文案的提取成为了许多创作者和营销人员的日常需求。无论是从短视频中提取精彩台词&#xff0c;还是将教育视频转化为学习资料&#xff0c;掌握高效的视频文案提取方法都显得尤为重要。今天&#xff0c;就来给大家分享5种视频文案提取方法&#xff0c;快来一起看看吧。 方法…

App及web反编译方案

APP反编译代码的工具下载&#xff1a; 下载地址&#xff1a;APK逆向三件套apktool-2.9.3.jar&#xff0c;dex2jar-2.0.zip&#xff0c;jd-gui-windows-1.6.6资源-CSDN文库 》dex2jar: 把dex文件转成jar文件 》 jd-gui: 这个工具用于将jar文件转换成java代码 》APKTool: 首先把…

【HCIA-Datacom】IPv4地址介绍

| | &#x1f449;个人主页&#xff1a;Reuuse 希望各位多多支持&#xff01;❀ | &#x1f449;HCIA专栏博客 | 最后如果对你们有帮助的话希望有一个大大的赞&#xff01; | ⭐你们的支持是我最大的动力&#xff01;⭐ | 目录 IPv4地址定义IPv4地址分类方式二级目录三级目录 I…

研1日记12

1. 改19->10 2. 学习数据不平衡问题 1. 欠采样 合并两个样本数据 两种方式 1. 按原分布比例划分。sklearn中train_test_split里&#xff0c;参数stratify含义解析_traintestsplit参数stratify-CSDN博客 3.刘二大人 卷积操作 待看论文&#xff1a; 刘老师指导&#xff1a…

PRD 在产品中的重要作用与撰写技巧(文末附PRD模板下载)

对于产品经理而言&#xff0c;PRD&#xff08;Product Requirement Document&#xff0c;产品需求文档&#xff09;是将产品概念转化为实际产品的关键桥梁。以下是关于如何写好 PRD 的详细指南&#xff1a; 一、PRD 的主要作用 统一团队认知 PRD 是产品团队的 “通用语言”。…

掌握 Spring:从新手到高手的常见问题汇总

一提起Spring&#xff0c;总感觉有太多知识&#xff0c;无法详尽&#xff0c;有些基础理解就先不说了&#xff0c;相信大家都已经用过Spring了 下面简单针对常见Spring面试题做些回答 核心特性 IOC容器spring事件资源管理国际化校验数据绑定类型转换spirng表达式面向切面编程……

视频监控基础学习

IPC&#xff1a;网络摄像机 NVR&#xff1a;网络硬盘录像机产品&#xff0c;搭配IPC使用。集成存储、解码显示、拼接控制、智能分析等多种功能于一体。一机多用&#xff0c;部署简单&#xff0c;功能齐全。安全可靠&#xff0c;适用于各类场景。 ONVIF协议&#xff1a;网络摄像…

数据集 wider_face 人脸数据集 人脸检测 >> DataBall

数据集 wider 人脸检测数据集 WIDER FACE: A Face Detection Benchmark inproceedings{yang2016wider, Author {Yang, Shuo and Luo, Ping and Loy, Chen Change and Tang, Xiaoou}, Booktitle {IEEE Conference on Computer Vision and Pattern Recognition (CVPR)}, Title…

巴西电商市场规模、前景及支付方式(pix、Boleto)

一、巴西电商市场分析 作为拉丁美洲最大经济体&#xff0c;巴西在拉丁美洲经济中占据领先地位&#xff0c;根据巴西地理与统计研究所(IBGE)的数据&#xff0c;2023年巴西GDP达到2.2万亿美元&#xff0c;跃居世界第九大经济体。数字化进程以及经济多元化推进正在推动该国中产阶…

基于SpringBoot+Vue的高校教材订购管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的…

jmeter吞吐量控制器

一、吞吐量控制器作用&#xff1a;旨在混合场景中&#xff0c;控制样本数&#xff0c;通常在比例场景中使用 吞吐量控制器提供了两种控制模式&#xff1a; 百分比执行&#xff08;Percent Executions&#xff09;&#xff1a; 吞吐量控制器会根据配置的百分比来决定其下的作用…

快速完成论文初稿写作的ChatGPT提示词分享

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 随着人工智能技术的迅速发展&#xff0c;ChatGPT已经成为学术写作中不可忽视的工具。它不仅能帮助研究者提高写作效率&#xff0c;还能在初稿撰写过程中提供结构化的建议和内容生成支持…

xshell密钥方式连接阿里云Linux

前提条件 有阿里云ECS linux实例安装好xshell工具 步骤 创建密钥对并绑定ECS实例 浏览器登录阿里云-->控制台-->ECS服务器-->网络与安全-->密钥对-->创建密钥对 根据提示填写密钥名称-->选中默认资源组-->创建 创建完成&#xff0c;会自动下载密钥对的…

看Threejs好玩示例,学习创新与技术(二)

本文接上篇内容&#xff0c;继续挖掘应用ThreeJS的一些创新算法。 本文理解难度比较大&#xff0c;可以先看一些概念&#xff0c;在难的地方培养一些意识即可。 1、扭曲的自然 下面图本身是矩形的&#xff0c;为何它可以这么扭曲呢&#xff1f;它在随机处带有一定的规律&…

多米优选APP源码系统开发

多米优选是一种基于卷轴模式的电商平台系统&#xff0c;它通过滚动展示商品信息&#xff0c;让用户在浏览商品的同时参与各种任务获得奖励&#xff0c;从而提升用户的活跃度和购买意愿。以下是多米优选卷轴模式系统开发的深度解析。 一、系统概述 多米优选卷轴模式源码系统旨在…

高精度治具加工的重要性和优势

在现代工业制造中&#xff0c;高精度治具加工扮演着举足轻重的角色。它不仅关乎产品制造的精度与质量&#xff0c;还直接影响到生产效率和成本控制。因此&#xff0c;时利和将深入探讨高精度治具加工的重要性和优势&#xff0c;对于提升工业制造水平具有重要意义。 高精度治具加…

以系统工程为指导的军品设计、开发与管理常用方法培训

课程背景&#xff1a; 产品开发和产品管理是组织经营战略的核心&#xff0c;而经营战略又为组织的创新战略、产品开发和产品管理提供了环境和方向。使命、愿景与核心价值观对于产品开发的聚焦点和管理方式都具有十分重要的作用。产品开发通常被称为组织的“血液”&#xff0c;…

计算机毕业设计 大学志愿填报系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

什么是485无线通信

在现代通信技术中&#xff0c;无线模块扮演着至关重要的角色&#xff0c;它们使得设备能够在没有物理连接的情况下进行数据交换。485通讯无线模块是这类无线模块中的一种&#xff0c;专门用于实现RS-485通信协议的无线传输。RS-485是一种广泛应用于工业自动化和远程监控系统的串…