C++:类与对象,定义类和构造函数
#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;
//如何让定义一个类
// 封装
// 1、将数据和方法定义到一起。
// 2、把想给你看的数据给你看,不想给你看的封装起来。 通过访问限定符来实现
class Stack
{
public:
//1.成员函数
void Push(int x);
//void Push(int x)
//{
// //...函数体
//}//这种是在类里面定义
void Pop();//这里是类的申明,类外面定义
bool Empty();
//....
private:
//2.成员变量
int _a;
int _size;
int _capacity;//这里是声明
};
//在类外面定义成员函数
void Stack::Push(int x)
{
//...
}
// 1、C语言中,struct是用来定义结构体的
// 2、C++中,兼容C的struct定义结构体的用法。但是同时struct也可以用来定义类
// 3、C++中使用class和struct定义类的区别? -》默认的访问限定符
//C
struct ListNode_C
{
int* _val;
struct ListNode_C* _next;
struct ListNode_C* _prev;
};
//C++
struct ListNode_CPP//默认共有
//class ListNode_CPP//默认私有
{
int* _val;
//ListNode_CPP* _next;//这个地方不需要加struct
struct ListNode_CPP* _next;//这个地方也可以这样用,C++兼容C
ListNode_CPP* _prev;//这是C++当成类的用法
//还可以定义成员函数
ListNode_CPP* Create(int val);
};
// 1、声明和定义的区别? 声明是一种承诺,承诺要干嘛,但是还没做,定义就是把这个事落地了
//类中既有成员变量,又有成员函数
class A1
{
public:
void f1()
{
}
private:
int _a;
char _ch;
};
//类中仅有成员函数
class A2
{
public:
void f2()
{
}
};
//类中既没有成员函数,也没有成员变量
class A3
{
};
int main()
{
//类实例化出对象,相当于定义出了类的成员变量
Stack s1;
Stack s2;
Stack s3;
//s1._a = nullptr;//私有的,不能访问
s1.Push(1);
//对象中只存储成员变量,不存储成员函数?为什么?
cout << sizeof(s1) << endl;
// 因为一个类实例化出N个对象,每个对象的成员变量都可以存储不同的值,但是调用的函数确是同一个
// 如果每个对象都放成员函数,而这些成员函数却是一样的,会浪费空间
// 如何计算一个类实例化出的对象的大小,计算成员变量之和,并且考虑内存对齐规则
// 没有成员变量的类的大小是1,面试题:为什么是1,而不是0。开1个字节不是为了存数据,而是占位
cout << sizeof(A1) << endl;
cout << sizeof(A2) << endl;
cout << sizeof(A3) << endl;
return 0;
}
实例化 -》就是用自己定义的类型定义出对象
1、内置类型,基本类型 int/char/double
2、自定义类型,class/struct
class Date
{
// this是谁调用这个成员函数,this就指向谁
public:
void Init(int year, int month, int day)//void Init(Date* this, int year, int month, int day)
{
_year = year;
_month = month;
_day = day;
}
void Print()//void Print(Date* this)
{
cout << _year << "-" << _month << "-" << _day << endl;
}
private:
int _year;
int _month;
int _day;
};
int main()
{
Date d1;
d1.Init(2025, 2, 20); //(&d1,2025,2,20);
d1.Print(); //(&d1);
return 0;
}
this指针存在哪里? (也就是存在进程地址空间的哪个区域?)
答:栈上的,因为它是一个形参。(ps:vs下是在ecx这个寄存器,来传递)
1、下面程序能编译通过吗?
2、下面程序会崩溃吗?在哪里崩溃?
class A
{
public:
void PrintA()
{
cout << _a << endl;
//cout << this->_a << endl;//会对空指针this进行解引用,会导致程序崩溃
}
void Show()
{
cout << "Show()" << endl;
}
private:
int _a;
};
int main()
{
A* p = nullptr; //因为p->PrintA();用的是指针,所以p->Print(p)传的也是指针p
p->PrintA(); //崩溃
p->Show(); //正常运行
//成员函数存在公共的代码段,所有p->Show()这里不会去p指向的对象上找
//访问成员函数,才会去找
A a;
a.PrintA();//p->Print(&a);这个地方a是对象,所以传的是&a,反正传的都是对象的地址
return 0;
}
构造函数是特殊的成员函数,需要注意的是,构造函数虽然名称叫构造,但是构造函数的主要任
务并不是开空间创建对象,而是初始化对象。
1. 函数名与类名相同。
2. 无返回值。
3. 对象实例化时编译器自动调用对应的构造函数。
4. 构造函数可以重载。
class Date
{
public:
//构造函数-》在对象构造时调用的函数,这个函数完成初始化工作
Date(int year, int month, int day)//构造函数没有返回值
{
_year = year;
_month = month;
_day = day;
}
Date()//函数重载
{
_year = 0;
_month = 1;
_day = 1;
}
void Print()
{
cout << _year << "-" << _month << "-" << _day << endl;
}
private:
int _year;
int _month;
int _day;
};
int main()
{
//对象实例化时自动调用
Date d1(2025, 2, 20);
d1.Print();
Date d2;//Date d2();不能加括号,调无参的不需要加括号,否则编译器不认识
d2.Print();
return 0;
}
5. 如果类中没有显式定义构造函数,则C++编译器会自动生成一个无参的默认构造函数,一旦
用户显式定义编译器将不再生成。
class Time
{
public:
Time()
{
cout << "Time()" << endl;
_hour = 0;
_minute = 0;
_second = 0;
}
private:
int _hour;
int _minute;
int _second;
};
class Date
{
public:
// 如果用户显式定义了构造函数,编译器将不再生成
// 我们没有显式定义的构造函数,这里编译器生成无参默认的构造函数(语法双标)
// 1、针对内置类型的成员变量没有做处理
// 2、针对自定义类型的成员变量,调用它的构造函数初始化
void Print()
{
cout << _year << "-" << _month << "-" << _day << endl;
}
private:
基本类型(内置类型)
int _year;
int _month;
int _day;
自定义类型
Time _t;
};
int main()
{
Date d1;//调用编译器生成的构造函数
d1.Print();
return 0;
}
7. 无参的构造函数和全缺省的构造函数都称为默认构造函数,并且默认构造函数只能有一个。
注意:无参构造函数、全缺省构造函数、我们没写编译器默认生成的构造函数,都可以认为是默认构造函数。
class Date
{
public:
//更好的方式:全缺省
Date(int year = 0, int month = 1, int day = 1)
{
_year = year;
_month = month;
_day = day;
}
//不能和全缺省同时出现,因为调用的时候会出现歧义,Date d1;
//Date()//函数重载
//{
// _year = 0;
// _month = 1;
// _day = 1;
//}
void Print()
{
cout << _year << "-" << _month << "-" << _day << endl;
}
private:
int _year;
int _month;
int _day;
};
int main()
{
Date d1;//调用默认构造函数 -》1、自己实现无参的构造函数 2、自己实现的全缺省构造函数
//3、编译器自动实现的构造函数 Date d1;的特点是不用传参数
d1.Print();
Date d1(2025, 3, 20);
d1.Print();
return 0;
}
class Date
{
public:
更好的方式:全缺省
Date(int year = 0, int month = 1, int day = 1)
{
_year = year;
_month = month;
_day = day;
}
不能和全缺省同时出现,因为调用的时候会出现歧义,Date d1;
Date()//函数重载
{
_year = 0;
_month = 1;
_day = 1;
}
void Print()
{
cout << _year << "-" << _month << "-" << _day << endl;
}
private:
int _year;
int _month;
int _day;
};
int main()
{
Date d1;
Date d2;
return 0;
}

相关文章:
C++:类与对象,定义类和构造函数
#define _CRT_SECURE_NO_WARNINGS 1 #include <iostream> using namespace std; //如何让定义一个类 // 封装 // 1、将数据和方法定义到一起。 // 2、把想给你看的数据给你看,不想给你看的封装起来。 通过访问限定符来实现 class Stack { public: //1.成…...
【Java消息队列】应对消息丢失、重复、顺序与积压的全面策略
应对消息丢失、重复、顺序与积压的全面策略 引言kafka消息丢失生产者消费者重复消费顺序消费消息积压生产者消费者其他RabbitMQ消息丢失生产者事务机制,保证生产者发送消息到 RabbitMQ Server发送方确认机制,保证消息能从交换机路由到指定队列保证消息在 RabbitMQ Server 中的…...
解锁机器学习核心算法|神经网络:AI 领域的 “超级引擎”
一、神经网络:AI 领域的 “超级引擎” 在机器学习的庞大算法体系中,有十种算法被广泛认为是最具代表性和实用性的,它们犹如机器学习领域的 “十大神器”,各自发挥着独特的作用。这十大算法包括线性回归、逻辑回归、决策树、随机森…...
Android14(13)添加墨水屏手写API
软件平台:Android14 硬件平台:QCS6115 需求:特殊品类的产品墨水屏实现手写的功能,本来Android自带的Input这一套可以实现实时展示笔迹,但是由于墨水屏特性,达不到正常的彩屏刷新的帧率,因此使用…...
flyway的ignoreMigrationPatterns
1、概述 ignoreMigrationPatterns 是 Flyway 中的一个配置选项,用于指定在迁移过程中可以忽略的迁移脚本的模式。这个选项通常用于在特定情况下跳过某些迁移脚本的执行,例如在开发环境中跳过某些测试数据脚本,或者在特定条件下忽略某些已经不…...
25年2月通信基础知识补充:多普勒频移与多普勒扩展、3GPP TDL信道模型
看文献过程中不断发现有太多不懂的基础知识,故长期更新这类blog不断补充在这过程中学到的知识。由于这些内容与我的研究方向并不一定强相关,故记录不会很深入请见谅。 【通信基础知识补充7】25年2月通信基础知识补充1 一、多普勒频移与多普勒扩展傻傻分不…...
华为动态路由-OSPF-骨干区
华为动态路由-OSPF-骨干区 一、OSPF简介 1、OSPF概述 OSPF是一种开放式的、基于链路状态的内部网关协议(IGP),用于在自治系统内部进行路由选择和通信。 OSPF是互联网工程任务组(IETF)定义的标准之一,被广…...
接口测试-API测试中常用的协议(中)
一、SOAP SOAP(Simple Object Access Protocol)即简单对象访问协议,是一种基于 XML 的用于在网络中交换结构化信息的协议,常用于 Web 服务之间的通信。以下为你详细介绍: 产生背景 在互联网发展过程中,需…...
植物大战僵尸杂交版v3.2.1最新版本(附下载链接)
B站游戏作者潜艇伟伟迷于12月21日更新了植物大战僵尸杂交版3.2.1版本!!!,有b站账户的记得要给作者三连关注一下呀! 不多废话下载链接放上: 夸克网盘链接::https://pan.quark.cn/s/e5…...
java每日精进 2.20 MQ相关复健
在 RabbitMQ 中,消息消费者对消息的签收(acknowledgment)可以通过三种方式进行管理:自动签收、手动签收 和 拒绝签收。它们主要控制消费者如何处理消息确认和消息的重新排队。下面详细讲解它们的区别,并通过代码示例展…...
【设计模式精讲】结构型模式之代理模式(静态代理、JDK动态代理、cglib动态代理)
文章目录 第五章 结构型模式5.1 代理模式5.1.1 代理模式介绍5.1.2 代理模式原理5.1.3 静态代理实现5.1.4 JDK动态代理5.1.4.1 JDK动态代理实现5.1.4.2 类是如何动态生成的5.1.4.3 代理类的调用过程 5.1.5 cglib动态代理5.1.5.1 cglib动态代理实现5.1.5.2 cglib代理流程 5.1.6 代…...
京东广告基于 Apache Doris 的冷热数据分层实践
一、背景介绍 京东广告围绕Apache Doris建设广告数据存储服务,为广告主提供实时广告效果报表和多维数据分析服务。历经多年发展,积累了海量的广告数据,目前系统总数据容量接近1PB,数据行数达到18万亿行,日查询请求量8…...
win11 安装pyenv来管理python
1、使用power shell或者cmd来安装: 2、使用pyenv 发现并没有pyenv。 3、在环境变量中增加: 路径:右键--此电脑--属性--高级系统设置--环境变量--Path--增加刚才--target所在的目录D:\tools\pyenv\pyenv-win\bin。 先退出当前的,…...
【AI】GitHub Copilot
GitHub Copilot 是一款由 GitHub 和 OpenAI 合作开发的 AI 编程助手,它可以在多种开发工具中使用。以下是 GitHub Copilot 支持的主要开发工具和平台: 1. Visual Studio Code (VS Code) 官方支持:GitHub Copilot 在 VS Code 中拥有最完整的集…...
【LeetCode 热题100】76. 最小覆盖子串的算法思路及python代码
76. 最小覆盖子串 给你一个字符串 s s s、一个字符串 t t t。返回 s s s 中涵盖 t t t 所有字符的最小子串。如果 s s s 中不存在涵盖 t t t 所有字符的子串,则返回空字符串 ‘ ‘ " \quad" ‘‘" 。 注意: 对于 t t t 中重复…...
力扣-回溯-17 电话号码的字母组合
思路 和之前的回溯不同的是,要遍历完所有的数字,并且在单层递归逻辑里需要遍历一整个字符串 代码 class Solution { public:vector<string> letters {"", "", "abc", "def", "ghi", "…...
[AHOI2018初中组] 分组---贪心算法
贪心没套路果真如此。 题目描述 小可可的学校信息组总共有 n 个队员,每个人都有一个实力值 ai。现在,一年一度的编程大赛就要到了,小可可的学校获得了若干个参赛名额,教练决定把学校信息组的 n 个队员分成若干个小组去参加这场…...
知识图谱-学习计划
✨知识图谱知识学习,给我点赞!🌟🌟🌟 🌟什么是知识图谱? 知识图谱是一种通过图结构表示知识的技术,它可以帮助我们更清晰地理解和组织信息。无论是学习、工作还是生活,知…...
网安作业3
标准版 接口ip配置 r2 [r2]interface GigabitEthernet 0/0/0 [r2-GigabitEthernet0/0/0]ip address 13.0.0.3 24 [r2-GigabitEthernet0/0/0]interface GigabitEthernet 0/0/1 [r2-GigabitEthernet0/0/1]ip address 100.1.1.254 24 [r2-GigabitEthernet0/0/1]interface Gigab…...
快速提升网站收录:内容创作的艺术
快速提升网站收录,内容创作是关键。以下是一些关于内容创作以提升网站收录的艺术性建议: 一、关键词研究与优化 选择长尾关键词:进行深入的关键词研究,选择既符合网站主题又具有一定搜索量的长尾关键词。这些关键词通常更具体&a…...
Windows 安装 Hermes Agent 对接微信机器人-养马教程
Hermes Agent是龙虾之后的又一热门工具,他是具备内置学习循环的自主智能体。本文介绍在Windows11 安装 Hermes Agent 并对接微信工具 官方文档:https://hermes-agent.nousresearch.com/ 1. 安装前准备 1.1 Windows 侧要求 windows本文基于wls安装&…...
模型加载慢、吞吐暴跌、OOM频发,MCP AI推理配置错误诊断与秒级修复方案
更多请点击: https://intelliparadigm.com 第一章:MCP AI推理配置的典型故障全景图 在大规模模型协同平台(MCP)中,AI推理配置的稳定性直接决定服务可用性与响应质量。常见故障并非孤立发生,而是呈现链式耦…...
MCP低代码集成调试成功率从41%→98.6%:基于137个真实产线案例提炼的7阶渐进式验证模型
更多请点击: https://intelliparadigm.com 第一章:MCP低代码集成调试的行业痛点与演进逻辑 在企业级低代码平台(如MCP——Model-Code-Platform)快速落地过程中,集成调试正成为交付瓶颈的核心症结。开发者常需在可视化…...
Qwen3.5-9B-AWQ-4bit Qt桌面应用开发:跨平台AI助手客户端
Qwen3.5-9B-AWQ-4bit Qt桌面应用开发:跨平台AI助手客户端 1. 为什么需要本地化AI助手 在数字化办公场景中,我们经常遇到需要快速获取信息、处理文档或编写代码的需求。传统的云端AI服务虽然强大,但存在响应延迟、隐私顾虑和网络依赖等问题。…...
Qianfan-OCR开源大模型部署:免编译、免依赖、开箱即用镜像方案
Qianfan-OCR开源大模型部署:免编译、免依赖、开箱即用镜像方案 1. 项目概述 Qianfan-OCR是百度千帆推出的开源文档智能多模态模型,基于4B参数的端到端视觉语言架构。这个开箱即用的镜像方案让传统OCR技术栈的复杂部署成为历史,无需处理繁琐…...
real-anime-z插画工作流整合:从草图生成→风格强化→尺寸适配一站式完成
real-anime-z插画工作流整合:从草图生成→风格强化→尺寸适配一站式完成 1. 镜像介绍与核心价值 real-anime-z是一款专为二次元插画创作设计的文生图工具,它整合了从草图生成到最终成品的完整工作流。这个镜像特别适合需要快速产出动漫风格作品的创作者…...
SuperDesign:企业级中后台前端解决方案的设计理念与实战指南
1. 项目概述与核心价值最近在和一些做企业级应用开发的朋友聊天时,发现大家普遍面临一个痛点:从零开始搭建一个功能完善、界面美观、权限清晰的后台管理系统,实在是太耗费时间了。UI组件要选型、权限模型要设计、路由要配置、状态管理要集成……...
5分钟搞定!图图的嗨丝造相-Z-Image-Turbo开箱即用,生成你的第一个渔网袜AI作品
5分钟搞定!图图的嗨丝造相-Z-Image-Turbo开箱即用,生成你的第一个渔网袜AI作品 1. 快速了解镜像功能 1.1 镜像是什么? 图图的嗨丝造相-Z-Image-Turbo是一个专门用于生成穿着大网眼渔网袜人物图像的AI模型。它基于Z-Image-Turbo基础模型&am…...
深度学习在影评情感分析中的应用与实践
1. 项目概述:基于深度学习的影评情感分析影评情感分析是自然语言处理(NLP)领域的经典任务,也是商业场景中应用最广泛的文本分类技术之一。我在多个电商和社交平台的内容分析系统中都实践过类似方案。这个项目的核心是通过深度学习…...
天赐范式第23天:上篇是过程,这篇是结果,基于算子化筛选的MOF催化剂高通量发现系统
🚀 摘要感觉和前文很像是吧!是就对了,上篇是过程,这篇是结果。材料筛选是材料科学研究的核心瓶颈。传统的试错法和单一DFT计算效率低下,难以应对海量材料空间的探索需求。本文提出天赐范式 v5.16,一种基于四…...
