面向对象——类与对象
文章目录
- 类与对象
- 构造函数、析构函数
- get/set方法
- 函数:类内声明、类外定义
- static
类与对象
#include<iostream>
#include<string>
using namespace std;
/*
类与对象
*/
class Person{public:string name;// 固有属性,成员变量 int age;public:void eat(){ // 成员函数,成员方法 cout<<"eat()"<<endl;}void show(){cout<<"[name:"<<name<<", age:"<<age<<"]"<<endl;}
};
int main(){Person p1; // 实例化对象 p1.name = "AAA";p1.age = 11;p1.eat();p1.show();return 0;
}
构造函数、析构函数
#include<iostream>
#include<string>
using namespace std;/*
构造函数类成员属性
public属性的成员对外可见,对内可见。
private属性的成员对外不可见,对内可见。
protected属性的成员对外不可见,对内可见,且对派生类是可见的。
*/class Person{public: // 公开,哪里都可以访问 string name;// 固有属性,成员变量 int age;public: // 公开,哪里都可以访问 Person(){// 无参构造 cout<<"构造函数:Person()"<<endl;} Person(string _name,int _age){// 有参构造函数 name = _name;age = _age;cout<<"构造函数:Person(string _name,int _age)"<<endl;}Person(const Person& p){ // 复制构造函数 name = p.name;age = p.age;cout<<"构造函数:Person(const Person& p)"<<endl;}~Person(){ // 析构函数// 析构函数:无法重载,析构顺序与构造顺序相反 cout<<"~Person()"<<name<<endl; }void show(){ // 成员函数,成员方法 cout<<"[name:"<<name<<", age:"<<age<<"]"<<endl;}
};
int main(){Person p1; // 实例化对象,调用无参构造函数 p1.name = "AAA"; // errorp1.age = 11;p1.show();Person p2("BBB", 12);// 实例化对象,调用有参构造函数 p2.show();Person p3(p1);p3.show(); return 0;
}
get/set方法
#include<iostream>
#include<string>
using namespace std;/*
get/set方法
*/
class Person{private: // 私有,仅类内可以访问 string name;// 固有属性,成员变量 int age;public: // 公开,哪里都可以访问 Person(){// 无参构造 cout<<"构造函数:Person()"<<endl;} Person(string _name,int _age){// 有参构造函数 name = _name;age = _age;cout<<"构造函数:Person(string _name,int _age)"<<endl;}Person(const Person& p){ // 复制构造函数 name = p.name;age = p.age;cout<<"构造函数:Person(const Person& p)"<<endl;}~Person(){ // 析构函数// 析构函数:无法重载,析构顺序与构造顺序相反 cout<<"~Person()"<<name<<endl; }// 提供get/set方法 void setName(string _name){ name = _name; } string getName(){ return name; }void setAge(int _age){ age = _age; }int getAge(){ return age; }void show(){ // 成员函数,成员方法 cout<<"[name:"<<name<<", age:"<<age<<"]"<<endl;}
};
int main(){Person p1; // 实例化对象,调用无参构造函数
// p1.name = "AAA"; // error
// p1.age = 11;p1.setName("AAA");p1.setAge(11);p1.show();Person p2("BBB", 12);// 实例化对象,调用有参构造函数 p2.show();Person p3(p1);p3.setName("CCC");p3.show(); return 0;
}
函数:类内声明、类外定义
#include<iostream>
#include<string>
using namespace std;/*
函数:类内声明、类外定义
*/class Person{private: // 私有,仅类内可以访问 string name;// 固有属性,成员变量 int age;public: // 公开,哪里都可以访问 Person(); // 无参构造函数的声明 Person(string _name,int _age);// 有参构造函数的声明 Person(const Person& p); // 复制构造函数的声明 ~Person(); // 析构函数的声明 // 提供get/set方法 void setName(string _name){ name = _name; } string getName(){ return name; }void setAge(int _age){ age = _age; }int getAge(){ return age; }void show(){ // 成员函数,成员方法 cout<<"[name:"<<name<<", age:"<<age<<"]"<<endl;}
};// 构造函数的类外实现
Person::Person(){// 无参构造 cout<<"构造函数:Person()"<<endl;
}
Person::Person(string _name,int _age){// 有参构造函数 name = _name;age = _age;cout<<"构造函数:Person(string _name,int _age)"<<endl;
}
Person::Person(const Person& p){ // 复制构造函数 name = p.name;age = p.age;cout<<"构造函数:Person(const Person& p)"<<endl;
}
Person::~Person(){ // 析构函数
// 析构函数:无法重载,析构顺序与构造顺序相反 cout<<"析构函数:~Person()"<<name<<endl;
}int main(){Person p1;
// p1.name = "AAA"; // error
// p1.age = 11;p1.setName("AAA");p1.setAge(11);p1.show();Person p2("BBB", 12);// 实例化对象,调用有参构造函数 p2.show();Person p3(p1);p3.setName("CCC");p3.show(); return 0;
}
static
#include<iostream>
#include<string>
using namespace std;/*
内联成员函数,使用inline关键字将函数定义为内联函数。
对于成员函数来说,如果其定义是在类体中,即使没有使用inline关键字,该成员函数也被认为是内联成员函数。static 关键字: 静态成员属于类
对于静态成员来说,不仅可以通过对象访问,还可以直接使用类名访问:
----------------临时分割线
静态数据成员可以是当前类的类型,而其他数据成员只能是当前类的指针或引用类型
类的静态成员函数只能访问类的静态数据成员,而不能访问普通的数据成员。
静态成员函数不能定义为const成员函数,即静态成员函数末尾不能使用const关键字。
*/class Person{private: // 私有,仅类内可以访问 string name;// 固有属性,成员变量 int age;public: // 公开,哪里都可以访问 static int cnt; Person(); // 无参构造函数的声明 Person(string _name,int _age);// 有参构造函数的声明 Person(const Person& p); // 复制构造函数的声明 ~Person(); // 析构函数的声明 // 提供get/set方法 void setName(string _name){ name = _name; } string getName(){ return name; }void setAge(int _age){ age = _age; }int getAge(){ return age; }void show(){ // 成员函数,成员方法 cout<<"[name:"<<name<<", age:"<<age<<"]"<<endl;}
};
int Person::cnt = 0; // 初始cnt // 构造函数的类外实现
Person::Person(){// 无参构造 cnt ++;cout<<"构造函数:Person()"<<endl;
}
Person::Person(string _name,int _age){// 有参构造函数 cnt ++;name = _name;age = _age;cout<<"构造函数:Person(string _name,int _age)"<<endl;
}
Person::Person(const Person& p){ // 复制构造函数 cnt ++;name = p.name;age = p.age;cout<<"构造函数:Person(const Person& p)"<<endl;
}
Person::~Person(){ // 析构函数cnt --;
// 析构函数:无法重载,析构顺序与构造顺序相反 cout<<"析构函数:~Person()"<<name<<endl; cout<<Person::cnt<<endl;
}
int main(){
// cout<<cnt<<end; // errorcout<<Person::cnt<<endl; // 0Person p1; // 实例化对象,调用无参构造函数
// p1.name = "AAA"; // error
// p1.age = 11;p1.setName("AAA");p1.setAge(11);p1.show();cout<<Person::cnt<<endl; // 1Person p2("BBB", 12);// 实例化对象,调用有参构造函数 p2.show();cout<<Person::cnt<<endl; // 2Person p3(p1);p3.setName("CCC");p3.show(); cout<<Person::cnt<<endl; // 3cout<<p3.cnt<<endl; // 3 return 0;
}
相关文章:
面向对象——类与对象
文章目录 类与对象构造函数、析构函数get/set方法函数:类内声明、类外定义static 类与对象 #include<iostream> #include<string> using namespace std; /* 类与对象 */ class Person{public:string name;// 固有属性,成员变量 int age;pu…...
Golang的[]interface{}为什么不能接收[]int?
在 Go 中,[]interface{} 和 []int 是两种不同的类型,虽然它们的底层数据结构都是切片,但是它们的元素类型不同。[]interface{} 是一个空接口切片,可以容纳任意类型的元素,而 []int 是一个整数切片,只能容纳…...

重启服务器或重启docker,导致emqx的Dashboard的密码重置为public
最近在项目中突然发现重启服务器,或者重启docker 修改好的emqx的Dashboard的密码重置为public 技术博客 http://idea.coderyj.com/ 1.解决办法就是固定 emqx的节点 # 拉取镜像 docker pull emqx/emqx# 创建目录,进行目录挂载 mkdir -p /docker/emqx/{etc,lib,data,…...

就业班 第三阶段(ansible) 2401--4.16 day2 ansible2 剧本+角色
六、Ansible playbook 简介 playbook 是 ansible 用于配置,部署,和管理被控节点的剧本。 通过 playbook 的详细描述,执行其中的一系列 tasks ,可以让远端主机达到预期的状态。playbook 就像 Ansible 控制器给被控节点列出的的…...
常用的过滤网站扫描网站攻击的路径是那些,比如:/etc/passwd等
网站攻击中经常被尝试的路径主要包括利用漏洞获取敏感文件、执行系统命令或者注入恶意代码的尝试。以下是一些常见的被攻击者尝试访问的路径和文件,这些通常在网络入侵检测系统(IDS)和网络防火墙的过滤规则中被特别关注: 系统文件…...

考研数学|《1800》《660》《880》如何选择和搭配?(附资料分享)
直接说结论:基础不好先做1800、强化之前660,强化可选880/1000题。 首先,传统习题册存在的一个问题是题量较大,但难度波动较大。《汤家凤1800》和《张宇1000》题量庞大,但有些题目难度不够平衡,有些过于简单…...

论文笔记:Are Human-generated Demonstrations Necessary for In-context Learning?
iclr 2024 reviewer 评分 6668 1 intro 大型语言模型(LLMs)已显示出在上下文中学习的能力 给定几个带注释的示例作为演示,LLMs 能够为新的测试输入生成输出然而,现行的上下文学习(ICL)范式仍存在以下明显…...

C语言 | Leetcode C语言题解之第28题找出字符串中第一个匹配项的下标
题目: 题解: int strStr(char* haystack, char* needle) {int n strlen(haystack), m strlen(needle);if (m 0) {return 0;}int pi[m];pi[0] 0;for (int i 1, j 0; i < m; i) {while (j > 0 && needle[i] ! needle[j]) {j pi[j - …...
「Python大数据」数据采集-某东产品数据评论获取
前言 本文主要介绍通过python实现数据采集、脚本开发、办公自动化。数据内容范围:星级评分是1-3分、获取数据页面是前50页。 友情提示 法律分析:下列三种情况,爬虫有可能违法,严重的甚至构成犯罪: 爬虫程序规避网站经营者设置的反爬虫措施或者破解服务器防抓取措施,非法…...
ORACLE错误提示概述
OceanBase分布式数据库-海量数据 笔笔算数 保存起来方便自己查看错误代码。 ORA-00001: 违反唯一约束条件 (.) ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数 ORA-00019: 超出最大会话许可数 ORA-00020: 超出最大进程数 () ORA-00021: 会话附属于其它某些进程…...
2024年4月13日美团春招实习试题【第一题:好子矩阵】-题目+题解+在线评测【模拟】
2024年4月13日美团春招实习试题【第一题:好子矩阵】-题目题解在线评测【模拟】 题目描述:输入描述输出描述样例 解题思路一:模拟解题思路二:思路二解题思路三:直接判断 题目描述: 塔子哥定义一个矩阵是”好矩阵”&…...

ssm057学生公寓管理中心系统的设计与实现+jsp
学生公寓管理中心系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本学生公寓管理中心系统就是在这样的大环境下诞生,其可以帮助管…...

循环神经网络(RNN):概念、挑战与应用
循环神经网络(RNN):概念、挑战与应用 1 引言 1.1 简要回顾 RNN 在深度学习中的位置与重要性 在深度学习的壮丽图景中,循环神经网络(Recurrent Neural Networks,RNN)占据着不可或缺的地位。自从…...

UML 介绍
前言 UML 简介。 文章目录 前言一、简介1、事务2、关系1)依赖2)关联聚合组合 3)泛化4)实现 二、类图三、对象图四、用例图五、交互图1、序列图(顺序图)2、通信图 六、状态图七、活动图八、构件图࿰…...
Pytorch——训练时,冻结网络部分参数的方法
一、原理: 要固定训练网络的哪几层,只需要找到这几层参数(parameter),然后将其 .requires_grad 属性设置为 False 即可。 二、代码: # 根据参数层的 name 来进行冻结 unfreeze_layers ["text_id"] # 用列表 # 设置冻…...

制冷铜管焊接介绍
铜管是制冷装置的重要原材料,它主要有两种用途:①制作换热器。②制作连接管道和管件。常用的焊料类型有铜磷焊料、银铜焊料、铜锌焊料等。在焊接时要根据管道材料的特点,正确的选择焊料及熟练的操作,以确保焊接的质量。 1.1对同类…...

spring06:mybatis-spring(Spring整合MyBatis)
spring06:mybatis-spring(Spring整合MyBatis) 文章目录 spring06:mybatis-spring(Spring整合MyBatis)前言:什么是 MyBatis-Spring?MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合…...

如何使用自定义Promptbooks优化您的安全工作流程
在当今的数字化时代,安全工作流程的优化变得前所未有的重要。安全团队需要快速、有效地响应安全事件,以保护组织的数据和资产。Microsoft Copilot for Security提供了一种强大的工具——自定义Promptbooks,它可以帮助安全专家通过自动化和定制…...

Text2sql的一些技巧
最近看到了一篇关于text2sql的文章,以及一些论文。对使用模型做text2sql给了一些不错的建议。 参考文章:24年大模型潜力方向:大浪淘沙后的Text-to-SQL和Agent - 知乎 论文:https://arxiv.org/pdf/2403.09732.pdf 关于模型的建议 …...

aws云靶场和一些杂记
aws靶场 在AWS靶场中,存在三个安全问题:1) 一个S3存储桶政策配置错误,允许公共访问,通过访问特定域名可获取flag。2) SQS消息队列的政策没有限制角色,允许发送和接收消息,通过aws sqs命令行工具的receive-…...

听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...
Git常用命令完全指南:从入门到精通
Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...

针对药品仓库的效期管理问题,如何利用WMS系统“破局”
案例: 某医药分销企业,主要经营各类药品的批发与零售。由于药品的特殊性,效期管理至关重要,但该企业一直面临效期问题的困扰。在未使用WMS系统之前,其药品入库、存储、出库等环节的效期管理主要依赖人工记录与检查。库…...

【51单片机】4. 模块化编程与LCD1602Debug
1. 什么是模块化编程 传统编程会将所有函数放在main.c中,如果使用的模块多,一个文件内会有很多代码,不利于组织和管理 模块化编程则是将各个模块的代码放在不同的.c文件里,在.h文件里提供外部可调用函数声明,其他.c文…...
Java并发编程实战 Day 11:并发设计模式
【Java并发编程实战 Day 11】并发设计模式 开篇 这是"Java并发编程实战"系列的第11天,今天我们聚焦于并发设计模式。并发设计模式是解决多线程环境下常见问题的经典解决方案,它们不仅提供了优雅的设计思路,还能显著提升系统的性能…...
从实验室到产业:IndexTTS 在六大核心场景的落地实践
一、内容创作:重构数字内容生产范式 在短视频创作领域,IndexTTS 的语音克隆技术彻底改变了配音流程。B 站 UP 主通过 5 秒参考音频即可克隆出郭老师音色,生成的 “各位吴彦祖们大家好” 语音相似度达 97%,单条视频播放量突破百万…...

echarts使用graphic强行给图增加一个边框(边框根据自己的图形大小设置)- 适用于无法使用dom的样式
pdf-lib https://blog.csdn.net/Shi_haoliu/article/details/148157624?spm1001.2014.3001.5501 为了完成在pdf中导出echarts图,如果边框加在dom上面,pdf-lib导出svg的时候并不会导出边框,所以只能在echarts图上面加边框 grid的边框是在图里…...
Java中栈的多种实现类详解
Java中栈的多种实现类详解:Stack、LinkedList与ArrayDeque全方位对比 前言一、Stack类——Java最早的栈实现1.1 Stack类简介1.2 常用方法1.3 优缺点分析 二、LinkedList类——灵活的双端链表2.1 LinkedList类简介2.2 常用方法2.3 优缺点分析 三、ArrayDeque类——高…...
Git 命令全流程总结
以下是从初始化到版本控制、查看记录、撤回操作的 Git 命令全流程总结,按操作场景分类整理: 一、初始化与基础操作 操作命令初始化仓库git init添加所有文件到暂存区git add .提交到本地仓库git commit -m "提交描述"首次提交需配置身份git c…...

RFID推动新能源汽车零部件生产系统管理应用案例
RFID推动新能源汽车零部件生产系统管理应用案例 一、项目背景 新能源汽车零部件场景 在新能源汽车零部件生产领域,电子冷却水泵等关键部件的装配溯源需求日益增长。传统 RFID 溯源方案采用 “网关 RFID 读写头” 模式,存在单点位单独头溯源、网关布线…...