C++:类的定义和实例化

目录

一、类的定义

  1、类的定义格式

  2、访问限定符

  3、类域

二、实例化

  1、实例化的概念

  2、对象大小


一、类的定义

  1、类的定义格式

  • class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。
  • 为了区分成员变量,⼀般习惯上成员变量会加⼀个特殊标识,如成员变量前面或者后面加_或者m开头,注意C++中这个并不是强制的,只是⼀些惯例,具体看公司的要求。
  • C++中struct也可以定义类,C++兼容C中struct的用法,同时struct升级成了类,明显的变化是struct中可以定义函数,⼀般情况下我们还是推荐用class定义类。
  • 定义在类⾯的成员函数默认为inline。

  2、访问限定符

  • ⼀般成员变量都会被限制为private/protected,需要给别人使用的成员函数会放为public
  • C++⼀种实现封装的方式,⽤类将对象的属性与方法结合在⼀块,让对象更加完善,通过访问权限选择性的将其接提供给外部的用户使用。
  • public修饰的成员在类外可以直接被访问;protected和private修饰的成员在类外不能直接被访问,protected和private是⼀样的,以后的继承才能体现出他们的区别。
  • 访问权限作用域从该访问限定符出现的位置开始直到下⼀个访问限定符出现时为止,如果后面没有访问限定符,作用域就到}即类结束.。

如下,我们创建了一个时间类。  若我们想使用这个栈,就跟在C语言里使用结构体差不多。

#include <iostream>
using namespaec std;//class 是类的关键字,它后面接着的是类的名字
class Time
{
public:void Init(int year, int month, int day)//初始化时间类{_year = year;_month = month_day = day;}void Print()//打印{cout<< _year<< '-'<< _month<< '-'<< _day<< endl;}private:int _year;int _month;int _day;
};//加分号int main()
{Time t;//创建一个类对象t.Init(2000, 1, 1)//将他初始化t.Print();//打印return 0;
}

在这个时间类里我们不能直接访问它的私有成员_year、_month、_day)。

int main()
{Time t;//创建一个类对象//t._year = 2000;//t._month = 1;//t.day = 1;//上面三个都是会编译报错的return 0;
}

class定义成员没有被访问限定符修饰时默认为private,struct默认为public。

struck Time_s
{
//public:int _year;int _month;int _day;
};class Time_c
{
//private: int _year;int _month;int _day;
};int main()
{Time_s ts;Time_c tc;ts._year = 2000;//编译器可以执行tc._year = 2000;//编译报错return 0;
}

  3、类域

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

#include <iostream>
using namespaec std;class Time
{
public:void Init(int year, int month, int day);//初始化时间类
private:int _year;int _month;int _day;
};
//使用::作用域操作符
void Time::Init(int year, int month, int day)
{_year = year;_month = month_day = day;
}int main()
{Time t;//创建一个类对象t.Init(2000, 1, 1)//将他初始化return 0;
}

二、实例化

  1、实例化的概念

用类类型在物理内存中创建对象的过程,称为类实例化出对象。

类是对象进行⼀种抽象描述,是⼀个模型⼀样的东西,限定了类有哪些成员变量,这些成员变量只
是声明,没有分配空间,用类实例化出对象时,才会分配空间。

⼀个类可以实例化出多个对象,就像现实生活中盖房子一样,我们可以用一个建筑图纸盖多个房子,而类就是建筑图纸,当我们要创建一个类对象的时候就是盖房子,也就是实例化。


  2、对象大小

我们要计算创建类对象的大小,我们首先要知道它在内存里存储的规则:

  • 第⼀个成员在与结构体偏移量为0的地址处。
  • 其他成员变量要对⻬到某个数字(对齐数)的整数倍的地址处。
  • 注意:对齐数=编译器默认的⼀个对齐数与该成员大小的较小值。
  • VS中默认的对齐数为8。
  • 结构体总大小为:最大对齐数(所有变量类型最大者与默认对齐参数取最小)的整数倍。
  • 如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最⼤对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。

它的对齐规则跟C语言里数据结构的对齐规则差不多,不过C++类的对齐规则,是针对与它的成员变量的,不包括成员函数。

还有一种特殊的对象⬇,里面没有成员变量,它的内存大小是1,目的是说明有这个类。

#include <iostream>
using namespace std;
class A
{
};int main()
{A a;cout<< sizeof(a)<< endl;return 0;
}

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

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

相关文章

@TableName(value=““)

Spring中Service对应的实体Entity类上不写TableName(value"")的注解&#xff0c;怎样对应到数据表&#xff1f; 在使用 MyBatis-Plus 时&#xff0c;如果实体类没有使用 TableName(value"") 注解来指定数据库表名&#xff0c;MyBatis-Plus 会根据默认的命…

log4js node日志插件

最近不是特别忙在用express搭建后台项目&#xff0c;在开发过程中遇到了需要输入日志的问 本来想直接用node自带的console来实现&#xff0c;后来发现console输出的日志达不到自己希望的 日志格式&#xff0c;后来各种百度发现了log4js插件&#xff0c;本文来记录log4js插件使用…

STM32智能工业自动化监控系统教程

目录 引言环境准备智能工业自动化监控系统基础代码实现&#xff1a;实现智能工业自动化监控系统 4.1 数据采集模块 4.2 数据处理与控制模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景&#xff1a;工业自动化与管理问题解决方案与优化收尾与总结 1. 引言 智能…

基于zynq的视频采集与hdmi显示(未完)

文章目录 一、项目整体框架一、传感器配置与驱动二、IMX222 1080P 模式图像解析(bayer 2 rgb 模块)2.1 解析有效像素(gen_sync)2.1.1同步字详细介绍&#xff1a; 2.2 bayer 2 rgb 一、项目整体框架 一、传感器配置与驱动 camera信息&#xff1a;索尼IMX222摄像头 SPI&#xf…

脚本练习-每5分钟执行一次获取当前服务器的基本情况

设计一个shell程序&#xff0c;每5分钟执行一次获取当前服务器的基本情况&#xff08;内存使用率&#xff0c;CPU负载&#xff0c;I/O&#xff0c;磁盘使用率&#xff09;&#xff0c;保存到120.20.20.20数据库上数据库帐号aaa密码bbb库名test表名host 创建一个名为server_stat…

Android10.0 锁屏分析-KeyguardPatternView图案锁分析

首先一起看看下面这张图&#xff1a; 通过前面锁屏加载流程可以知道在KeyguardSecurityContainer中使用getSecurityView()根据不同的securityMode inflate出来&#xff0c;并添加到界面上的。 我们知道&#xff0c;Pattern锁所使用的layout是 R.layout.keyguard_pattern_view&a…

【内网穿透】如何本地搭建Whisper语音识别模型并配置公网地址

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

用C语言写的一个扫雷小游戏

头文件 调用头文件和声明函数 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <time.h> #include <stdlib.h>#define ROW 9 #define COL 9#define ROWS ROW2 #define COLS COL2#define EASY_CONT 10//声明函数 //初始化棋盘函数 void InitB…

【机器学习】Grid Search: 一种系统性的超参数优化方法

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 Grid Search: 一种系统性的超参数优化方法引言什么是Grid Search&#xff1f;Gr…

Spring Boot(概要 入门 Spring Boot 核心配置 YAML JSR303数据校验 )

目录 一、Spring Boot概要 1. SpringBoot优点 2. SpringBoot缺点 二、Spring Boot入门开发 1. 第一个SpringBoot项目 项目创建方式一&#xff1a;使用 IDEA 直接创建项目 项目创建方式二&#xff1a;使用Spring Initializr 的 Web页面创建项目 &#xff08;了解&#x…

Jenkins 安装、部署与配置

引言 在软件开发领域&#xff0c;持续集成&#xff08;CI&#xff09;和持续部署&#xff08;CD&#xff09;是提高代码质量和开发效率的关键实践。Jenkins 是一款开源的持续集成/持续部署服务器&#xff0c;以其灵活性和丰富的插件生态系统而闻名。本文将详细介绍 Jenkins 的…

探索 Flask:从入门到精通的完整学习指南

Flask 是当今最流行的 Python Web 框架之一&#xff0c;其简洁、灵活的设计使得开发者能够快速构建强大的 Web 应用。无论你是刚开始学习编程&#xff0c;还是想要深入了解 Web 开发技术&#xff0c;Flask 都是一个理想的起点。本文将带你逐步深入&#xff0c;探索 Flask 的核心…

Java学习高级四

JDK8开始&#xff0c;接口新增了三种形式的方法 接口的多继承 内部类 成员内部类 静态内部类 局部内部类 匿名内部类 import javax.swing.*; import java.awt.event.ActionEvent;public class Test {public static void main(String[] args) {// 扩展 内部类在开发中的真实使用…

深度学习LSTM之预测光伏发电

代码一&#xff1a;训练LSTM模型 代码逐段分析 import numpy as np import pandas as pd import tensorflow.keras as tk from tensorflow.keras import layers首先&#xff0c;导入了必要的库&#xff1a;numpy用于数值计算&#xff0c;pandas用于数据处理&#xff0c;tenso…

Golang 后端面经

文章目录 一、Golanggolang GMP模型Golang中make和new的区别Golang内存逃逸&#xff0c;情况go内存对齐原则map的key值可以是函数、map和切片吗&#xff1f;channel类型可以比较吗容量为1的channel在什么情况下会堵塞&#xff08;除了常见的&#xff09;多线程同时读写map中不同…

搜维尔科技:我们用xsens完成了一系列高难度的运动项目并且捕获动作

我们用xsens完成了一系列高难度的运动项目并且捕获动作 搜维尔科技&#xff1a;我们用xsens完成了一系列高难度的运动项目并且捕获动作

zookeeper在哪里能用到

zookeeper是什么 ZooKeeper 顾名思义 动物园管理员&#xff0c;他是拿来管大象(Hadoop) 、 蜜蜂(Hive) 、 小猪(Pig) 的管理员&#xff0c; Apache Hbase和 Apache Solr 以及LinkedIn sensei 等项目中都采用到了 Zookeeper。 ZooKeeper是一个分布式的&#xff0c;开放源码的分…

【C++】多态进阶

标题&#xff1a;【C】多态进阶 水墨不写bug 目录 &#xff08;一&#xff09;多态的原理 &#xff08;1&#xff09;虚函数表 &#xff08;2&#xff09;多态的原理 &#xff08;3&#xff09;动态绑定与静态绑定 &#xff08;一&#xff09;多态的原理 &#xff08;1&am…

【1.合并两个数组】

题目&#xff1a; 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中&#xff0c;使合并后的数组同样按 非递减顺序 排列。 注意&#xff1a;最终&…

windows 11 PC查询连接过的wlan密码

1:管理员打开cmd 2:输入netsh wlan show profiles 3:netsh wlan show profiles Shw2024-5G keyclear 密码关键内容&#xff1a;12345678