类与对象(上-2)

类与对象(上-2)

  • 6、类的实例化
  • 7、计算类空间的大小
  • 8、this指针

6、类的实例化

Test.cpp

//用类类型创建对象的过程,称为类的实例化。
//类是对对象进行描述的,是一个 模型 一样的东西,来限定了类有哪些成员,定义一个类但并没有分配实际的内存空间来存储它。
//例如:设计出一个大楼的建筑模型,来指导大楼的实际建设。int mian()
{Person p1;  //类的实例化Person p2;Person p3;return 0;
}

F.h

#pragma once
#include <iostream>
using namespace std;class Person
{
public:void PrintPersonInfo();  //函数的申明private:char _name[20];      //变量的申明  (如何区分变量的申明和定义){申明:没有给变量开空间; 定义:给变量开了空间。}char _gender[3];     //这儿的成员变量处于类内,没有开空间。当用类来实例化对象时,才开辟的空间。int _age;
};

F.cpp

#include "Person.h"//这里需要指定PrintPersonInfo是属于Person这个类域的 
void Person::PrintPersonInfo() //函数的定义
{cout << _name << " " << _gender << " " << _age << endl;
}

7、计算类空间的大小

//{虽然没有给类开辟空间,但是可以计算类占据空间的大小}
//(1)类的空间大小计算与结构体相似,都遵循内存对其原则。
//(2)只计算类内的成员变量,而成员函数不需要考虑(因为成员函数不存储在实例化对象内,而是存储在公共代码区)
//(3)特殊的类:(没有成员变量的类对象,大小为:1byte;占位不存储实际数据,标识对象存在)。#include <iostream>
using namespace std;class A
{
public:void PrintA(){cout << _a << endl;}void FuncA(){cout << "FuncA()" << endl;}//private:char _a;
};int main()
{//类的存储模式:成员变量存储在实例化对象内,成员函数存储在公共代码区。
//实例化的每个对象的成员变量是不同的变量,具有独立的空间;而从各个对象的成员函数角度分析,调用的成员函数是同一个。
//所以如果将成员函数每次都保存在对象内,会造成空间浪费。A aa1;A aa2;aa1._a = 1;aa2._a = 2;aa1.PrintA(); //编译链接时,就根据函数名去公共代码区找到函数的地址 {call函数地址}。aa2.PrintA();A* ptr = nullptr;ptr->FuncA();  //运行结果是:程序正常运行打印;因为对象的成员函数FuncA保存在公共代码区,不需要对ptr进行解引用(没有动空指针),不会出错。return 0;
}

8、this指针

#include <iostream>
using namespace std;class Data
{
public://实参和形参位置不能显示传递和接收this指针,但是可以在成员函数内部使用this指针void Init(int year, int month, int day) //默认在参数的最前面加上: Data* const this (this本身不可修改,但是this指向的内容可以修改){this->_year = year;this->_month = month;_day = day;}void Print() //默认加参数: Data* const this{cout << this->_year << "-" << _month << "-" << _day << endl;}private:int _year;  //类的成员变量命名在首字母前面加 _int _month;int _day;
};int main()
{Data d1;      //虽然类的成员变量是私有的,无法在外面直接修改。但是可以通过调用成员函数去修改d1.Init(2022, 7, 17);Data d2;d2.Init(2022, 7, 18); //默认在参数的最前面加:&d2d1.Print(); //默认加参数:&d1d2.Print();return 0;
}//this指针存储在栈区,this指针是形参。存在某些优化的情况下,this指针存储在寄存器。

练习题目:

#include <iostream>
using namespace std;class A
{
public:void PrintA(){cout << this << endl;cout << _a << endl;}void Print(){cout << this << endl;cout << "Print()" << endl;}private:int _a;
};int main()
{A* p = nullptr;//p->Print();  //运行正常:程序正常运行打印;因为对象的成员函数FuncA保存在公共代码区,不需要对p进行解引用(没有动空指针),不会出错。p->PrintA();   //运行崩溃:PrintA非法访问了空指针return 0;
}

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

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

相关文章

回答网友 修改一个exe

网友说&#xff1a;他有个很多年前的没有源码的exe&#xff0c;在win10上没法用&#xff0c;让俺看一下。 俺看了一下&#xff0c;发现是窗体设计的背景色的问题。这个程序的背景色用的是clInactiveCaptionText。clInactiveCaptionText 在win10之前的系统上是灰色&#xff0c;但…

幅度调制与角度调制

文章目录 前言一、调制简介1、调制定义2、调制目的3、调制的分类 二、幅度调制&#xff08;线性调制&#xff09;1、幅度调制的一般模型2、常规双边带调幅 AM①、AM 信号的产生②、AM 调制器的模型③、AM 波形和频谱④、AM 信号的特点⑤、AM 包络检波⑥、调幅系数 3、抑制载波双…

Java中对Redis的常用操作

目录 数据类型五种常用数据类型介绍各种数据类型特点 常用命令字符串操作命令哈希操作命令列表操作命令集合操作命令有序集合操作命令通用命令 在Java中操作RedisRedis的Java客户端Spring Data Redis使用方式介绍环境搭建配置Redis数据源编写配置类&#xff0c;创建RedisTempla…

推荐带500创作模型的付费创作V2.1.0独立版系统源码

ChatGPT 付费创作系统 V2.1.0 提供最新的对应版本小程序端&#xff0c;上一版本增加了 PC 端绘画功能&#xff0c; 绘画功能采用其他绘画接口 – 意间 AI&#xff0c;本版新增了百度文心一言接口。 后台一些小细节的优化及一些小 BUG 的处理&#xff0c;前端进行了些小细节优…

Spring依赖注入和ioc在spring中的实现方式

目录 一、依赖注入 1.IOC思想 2.什么是依赖注入&#xff1f; 3.实例化对象中有pojo类型属性 二、IOC在Spring中的实现方式 1.获取bean的三种方式 1.1根据bean的id获取 1.2根据bean的类型获取&#xff08;最常用&#xff0c;因为在IOC容器中&#xff0c;一个类型的bean只…

<MySQL> Centos 7环境安装MySQL

Centos 7环境安装MySQL 1.卸载不要的环境 停止MySQL服务 systemctl stop mariadb.service systemctl stop mysqld禁止MySQL服务开机自启 systemctl disable mysqld卸载MySQL软件包 yum remove mysql-server mysql-client删除MySQL数据目录 rm -rf /var/lib/mysql清理MySQ…

[golang gin框架] 42.Gin商城项目-微服务实战之后台Rbac微服务角色增删改查微服务

一.重构后台Rbac用户登录微服务功能 上一节讲解了后台Rbac微服务用户登录功能以及Gorm数据库配置单独抽离&#xff0c;Consul配置单独抽离&#xff0c;这一节讲解后台Rbac微服务角色增删改查微服务功能&#xff0c;Rbac微服务角色增删改查微服务和后台Rbac用户登录微服务是属于…

SpringBoot入门

目录 一、创建项目 二、项目结构 三、起步依赖 四、简单请求接口 控制类 1、无参数 2、简单参数 3、实体参数 4、数组集合参数 5、json参数 五、统一响应结果 result.java HelloResponse.java 测试结果 一、创建项目 Spring官方骨架&#xff0c;可以理解为Sprin…

解决 “Module build failed (from ./node_modules/babel-loader/lib/index.js)“ 错误的方法

系列文章目录 文章目录 系列文章目录前言一、错误原因&#xff1a;二、解决方法&#xff1a;三、注意事项&#xff1a;总结 前言 在前端项目开发中&#xff0c;如果使用了 Babel 来转译 ES6 语法&#xff0c;有时会遇到错误信息 “Module build failed (from ./node_modules/b…

提升开发效率,Lombok的链式编程和构建模式

目录 链式编程 定义 代码示例 ​编辑 Accessors(chaintrue) 开启链式编程 ​编辑 Accessors(chain true,fluent true) 去除set和get 构建模式 定义 代码示例 ​编辑 踩坑 Singular 定义 代码示例 踩坑默认值情况 ​编辑 With 定义 代码示例 链式编程 定义 链…

ChatGPT的应用与发展趋势:解析人工智能的新风口

目录 优势 应用领域 发展趋势 总结 在人工智能技术迅猛发展的时代&#xff0c;自然语言处理系统的提升一直是研究者们追求的目标。作为人工智能领域的重要突破之一&#xff0c;ChatGPT以其出色的语言模型和交互能力&#xff0c;在智能对话领域取得了重要的进展。 ChatGPT是…

一文教会你单向链表

目录 一、什么是链表&#xff1f; 1.链表的定义 2.链表的实现 2.1链表的定义 2.2创建一个链表 二、链表的各个接口 1.创建节点 2.头插(将新创建的节点作为头插入到链表中) 3.打印链表 4.尾插(将新创建的节点插入到链表的末端) 5.头删 6.尾删 7.查找 8.删除指定节点位…

【计算机网络】10、ethtool

文章目录 一、ethtool1.1 常见操作1.1.1 展示设备属性1.1.2 改变网卡属性1.1.2.1 Auto-negotiation1.1.2.2 Speed 1.1.3 展示网卡驱动设置1.1.4 只展示 Auto-negotiation, RX and TX1.1.5 展示统计1.1.7 排除网络故障1.1.8 通过网口的 LED 区分网卡1.1.9 持久化配置&#xff08…

QT--day5(网络聊天室、学生信息管理系统)

服务器&#xff1a; #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//给服务器指针实例化空间servernew QTcpServer(this); }Widget::~Widget() {delete ui; …

Codeforces Round 889 (Div. 2)题解

目录 A. Dalton the Teacher题目大意题解思路代码 B. Longest Divisors Interval题目大意题解思路代码 C1. Dual (Easy Version)题目大意题解思路代码 A. Dalton the Teacher 题目链接 题目大意 Dalton是一个班级的老师&#xff0c;这个班级有 n n n个学生&#xff0c;分别…

GDAL C++ API 学习之路 OGRGeometry 抽象曲线基类 OGRCurve

OGRCurve class "ogrsf_frmts.h" OGRCurve 是 OGR&#xff08;OpenGIS Simple Features Reference Implementation&#xff09;几何库中的一个基类&#xff0c;表示曲线几何对象。它是 OGRLineString 和 OGRCircularString 的抽象基类&#xff0c;用于表示曲…

Kotlin知识点

Kotlin 是 Google 推荐的用于创建新 Android 应用的语言。使用 Kotlin&#xff0c;可以花更短的时间编写出更好的 Android 应用。 基础 Kotlin 程序必须具有主函数&#xff0c;这是 Kotlin 编译器在代码中开始编译的特定位置。主函数是程序的入口点&#xff0c;或者说是起点。…

JavaScript 作用域与闭包

本文内容学习于&#xff1a;后盾人 (houdunren.com) 1.作用域 1)函数被执行后其环境变量将从内存中删除。下面函数在每次执行后将删除函数内部的 total 变量。 function count() { let total 0; } count (); 2)函数每次调用都会创建一个新作用域 3)如果子函数被使用时父级环境…

【C++】类和对象 - 上

目录 1. 面向过程和面向对象初步认识2. 类的引入3. 类的定义4. 类的访问限定符及封装4.1 访问限定符4.2 封装 5. 类的作用域6. 类的实例化7. 类对象模型7.1 如何计算类的大小7.2 类对象的存储方式猜测7.3 结构体内存对齐规则 8. this指针8.1 引出8.2 this指针的特性 总结 1. 面…

【Leetcode】53. 最大子数组和

一、题目 1、题目描述 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组 是数组中的一个连续部分。 示例1: 输入:nums = [-2,1,-3,4,-1,2,1,-5,4] 输出:6 解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。…