day07.C++类与对象
一.类与对象的思想
1.1面向对象的特点
封装、继承、多态
1.2类的概念
创建对象的过程也叫类的实例化。每个对象都是类的一个具体实例(Instance),拥有类的成员变量和成员函数。由{ }包围,由;结束。
class name{
//类的成员(类体)=成员变量(类的属性)+成员函数(类的方法)
}
关键字 class
以下是一个简单类的定义:
class person{//类person
public://成员变量:char *name;int age;double height;//成员函数:void say(){cout<<name<<"的年龄是"<<age<<"身高是"<<height<<endl;}//声明成员函数的同时,也定义成员函数};
注:
- (1)类是一种构造类型,类的定义由一个分号(;)结束,不能省略(它是类的一部分)。
- (2)一个类可以创建多个对象,每个对象都是类类型的一个变量。
- (3)类成员变量的访问方法:通过 . 或者 ->来访问
- (4)成员函数是类的一个成员,出现在类中,作用范围由类来决定,而普通函数是独立的,作用范围是全局或者某个命名空间。
区别【类】与【结构体】:
- struct :内部默认是共有权限,结构体外部可以访问其内部成员
- class:内部默认是私有权限,类的外部不能直接访问内部成员;可以手动声明为共有权限;
1.3类的成员变量与成员函数
类,这种数据类型是一个包含成员变量和成员函数的集合。
类的成员变量,和普通变量一样,也有数据类型和名称,占用固定长度的内存。
但是,在定义类的时候不能对成员变量赋值,因为类只是一种数据类型或者说是一种模板,本身不占用内存空间,而变量的值则需要内存来存储。
类的成员函数,也和普通函数一样,都有返回值和参数列表。
成员函数与普通函数的区别是:
- 成员函数是一个类的成员,出现在类体中,它的作用范围由类来决定;
- 而普通函数是独立的,作用范围是全局的,或位于某个命名空间内。
成员函数可以在声明时定义,也可以在类中声明 在类外定义,这时需要域解析符::
class Student{public://成员变量char *name;int age;float score;//成员函数void say(); //函数声明};//函数定义void Student::say(){cout<<name<<"的年龄是"<<age<<",成绩是"<<score<<endl;}
在类体中直接定义函数时,不需要在函数名前面加上类名,因为函数属于哪一个类是不言而喻的。
但当成员函数定义在类外时,就必须在函数名前面加上类名予以限定。::被称为域解析符(也称作用域运算符或作用域限定符),用来连接类名和函数名,指明当前函数属于哪个类。
成员函数必须先在类体中作原型声明,然后在类外定义,也就是说类体的位置应在函数定义之前。
1.4对象的创建与访问
(1)对象的创建
将person看作新的数据类型,用类名构造对象
类名 对象名
person LiHua
class person LiHua//也可以
构造对象数组:
person student【100】
构造对象指针:
person stu;
person * pstu=&stu;
创建的对象 stu 在栈上分配内存,需要使用&获取它的地址。
pstu 是一个指针,它指向 Student 类型的数据,也就是通过 Student 创建出来的对象。
也可以在堆上创建对象,这时需要使用new关键字:
person *pstu =new stu;
使用 new 在堆上创建出来的对象是匿名的,没法直接使用,必须要用一个指针指向它,再借助指针来访问它的成员变量或成员函数。
栈内存是程序自动管理的,不能使用 delete 删除在栈上创建的对象;堆内存由程序员管理,对象使用完毕后可以通过 delete 删除。在实际开发中,new 和 delete 往往成对出现,以保证及时删除不再使用的对象,防止无用内存堆积。
(2)对象的访问
一般的对象可以使用点号.来访问成员变量和成员函数(这和通过结构体变量来访问它的成员类似)
person stu;stu.name = "小明";stu.age = 15;stu.height = 1.65;stu.say();
对象指针,可以通过箭头->来访问对象的成员变量和成员函数,(这和通过结构体指针来访问它的成员类似)。
person *pstu=&stu;
pstu -> name = "小明";
pstu -> age = 15;
pstu -> height = 1.66;
pstu -> say();
1.5类成员的访问权限
将类内分为公共权限(public)、保护权限(protected)、私有权限(private)
public 公共权限:类内可以访问,类外也可以访问
protected 保护权限:类内可以访问,类外不能访问
private 私有权限:类内可以访问,类外不能访问
class T{
private:int a;void f1(){}
protected:int b;void f2(){}
public:int c;void f3(){}
};int main(){T t;//创造对象t.c=3;t.f3();//私有成员无法通过外部访问//t.a=1;错误//t.f1(){ };错误//t.b=2;错误return 0;
}
注:
- 1. public修饰的成员在类外可以直接被访问
- 2. protected 和 private 修饰的成员在类外不能直接被访问 (此处protected和private是类似的)
- 3. 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止
- 4. 如果后面没有访问限定符,作用域就到 } 即类结束
- 5. class的默认访问权限为 private,struct 为 public(因为struct要兼容C)
#include <iostream>
using namespace std;
//类的声明:
class Student{
private: //私有的char *m_name;
public: //共有的void setname(char *name);void show();
};
//成员函数的定义
void Student::setname(char *name){m_name = name;
}
void Student::show(){cout<<"名字是"<<m_name<<endl;
}int main(){//在栈上创建对象:Student stu;//stu.m_name="小明“错误,私有成员变量不能在类外部通过对象访问stu.setname("小明");stu.show();//在堆上创建对象:Student *pstu = new Student;pstu -> setname("李华");pstu -> show();return 0;
}
给成员变量赋值的函数通常称为 set 函数,它们的名字通常以
set开头,后跟成员变量的名字;读取成员变量的值的函数通常称为 get 函数,它们的名字通常以
get开头,后跟成员变量的名字。
二. 构造函数
2.1构造函数的定义
在C++中,有一种特殊的成员函数(即:构造函数 Constructor),构造函数的名字和类名相同,没有返回值,不需要用户显式调用(用户也不能调用),而是在创建对象时自动执行。
构造函数:
- 1.函数名必须和类名称相同。
- 2.不能有返回值,也不能返回void,函数体不能有return语句。
- 3.它的作用是给 属性的成员变量赋值。
- 4.构造函数必须是 public 属性的,否则创建对象时无法调用。
- 5.构造函数在定义对象时会自动调用,不需要手动调用。 (要想调用该构造函数,就得在创建对象的同时传递实参,并且实参由
( )包围,和普通的函数调用非常类似。)
#include <iostream>
using namespace std;
class Student{
private:char *m_name;int m_age;float m_score;
public://声明构造函数Student(char *name, int age, float score);//声明普通成员函数void show();
};
//定义构造函数
Student::Student(char *name, int age, float score){m_name = name;m_age = age;m_score = score;
}
//定义普通成员函数
void Student::show(){cout<<m_name<<"的年龄是"<<m_age<<",成绩是"<<m_score<<endl;
}
int main(){//创建对象时向构造函数传参Student stu("小狼", 16, 96.5f);stu.show();//创建对象时向构造函数传参Student *pstu = new Student("sakura", 15, 97);pstu -> show();return 0;
}
2.2构造函数的重载
相关文章:
day07.C++类与对象
一.类与对象的思想 1.1面向对象的特点 封装、继承、多态 1.2类的概念 创建对象的过程也叫类的实例化。每个对象都是类的一个具体实例(Instance),拥有类的成员变量和成员函数。由{ }包围,由;结束。 class name{ //类的…...
String讲解
文章目录 String类的重要性常用的方法常用的构造方法String类的比较字符串的查找转化数字转化为字符串字符串转数字 字符串替换字符串的不可变性 字符串拆分字符串截取字符串修改 StringBuilder和StringBuffer String类的重要性 在c/c的学习中我们接触到了字符串,但…...
人群异常聚集监测系统-聚众行为检测与识别算法---豌豆云
聚众识别系统对指定区域进行实时监测,当监测到人群大量聚集、达到设置上限时,立即告警及时疏散。 旅游业作为国民经济战略性支柱产业,随着客流量不断增加,旅游景区和一些旅游城市的管理和服务面临着前所未有的挑战: …...
多模态基础---BERT
1. BERT简介 BERT用于将一个输入的句子转换为word_embedding,本质上是多个Transformer的Encoder堆叠在一起。 其中单个Transformer Encoder结构如下: BERT-Base采用了12个Transformer Encoder。 BERT-large采用了24个Transformer Encoder。 2. BERT的…...
图表示学习 Graph Representation Learning chapter2 背景知识和传统方法
图表示学习 Graph Representation Learning chapter2 背景知识和传统方法 2.1 图统计和核方法2.1.1 节点层次的统计和特征节点的度 节点中心度聚类系数Closed Triangles, Ego Graphs, and Motifs 图层次的特征和图的核节点袋Weisfieler–Lehman核Graphlets和基于路径的方法 邻域…...
OpenMVG(计算两个球形图像之间的相对姿态、细化重建效果)
目录 1 Bundle Adjustment(细化重建效果) 2 计算两个球形图像之间的相对姿态 1 Bundle Adjustment(细化重建效果) 数...
【QT+QGIS跨平台编译】之三十四:【Pixman+Qt跨平台编译】(一套代码、一套框架,跨平台编译)
文章目录 一、Pixman介绍二、文件下载三、文件分析四、pro文件五、编译实践一、Pixman介绍 Pixman是一款开源的软件库,提供了高质量的像素级图形处理功能。它主要用于在图形渲染、合成和转换方面进行优化,可以帮助开发人员在应用程序中实现高效的图形处理。 Pixman的主要特…...
2.17学习总结
tarjan 【模板】缩点https://www.luogu.com.cn/problem/P3387 题目描述 给定一个 �n 个点 �m 条边有向图,每个点有一个权值,求一条路径,使路径经过的点权值之和最大。你只需要求出这个权值和。 允许多次经过一条边或者…...
Unity类银河恶魔城学习记录7-7 P73 Setting sword type源代码
Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili Sword_Skill_Controller.cs using System.Collections; using System.Col…...
安卓版本与鸿蒙不再兼容,鸿蒙开发工程师招疯抢
最近,互联网大厂纷纷开始急招华为鸿蒙开发工程师。这是一个新的信号。在Android和iOS长期霸占市场的今天,鸿蒙的崛起无疑为整个行业带来了巨大的震动。 2023年11月10日,网易更新了高级/资深Android开发工程师岗位,职位要求参与云音…...
《白话C++》第9章 泛型,Page842~844 9.4.2 AutoPtr
源起: C编程中,最容易出的问题之一,就是内存泄露,而new一个对象,却忘了delete它,则是造成内存泄露的主要原因之一 例子一: void foo() {XXXObject* xo new XXXObject;if(!xo->DoSomethin…...
服务流控(Sentinel)
引入依赖 <!-- 必须的 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency><!-- sentinel 核心库 --> <dependency><groupId>com.ali…...
点亮代码之灯,程序员的夜与电脑
在科技的海洋里,程序员是那些驾驶着代码船只,穿梭于虚拟世界的探险家。他们手中的键盘是航行的舵,而那台始终不愿关闭的电脑,便是他们眼中永不熄灭的灯塔。有人说,程序员不喜欢关电脑,这究竟是为什么呢&…...
ClickHouse--07--Integration 系列表引擎
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 Integration 系列表引擎1 HDFS1.1 语法1.2 示例: 2 MySQL2.1 语法2.2 示例: 3 Kafka3.1 语法3.2 示例:3.3 数据持久化方法 Integ…...
前端架构: 脚手架框架之yargs的11种基础核心特性的应用教程
脚手架框架之yargs的基础核心特性与应用 1 )概述 yargs 是脚手架当中使用量非常大的一个框架进入它的npm官网: https://www.npmjs.com/package/yargs 目前版本: 17.7.2Weekly Downloads: 71,574,188 (动态数据)最近更新:last month (github)说明这是一个…...
MySQL性能调优篇(6)-主从复制的配置与管理
MySQL数据库主从复制是一种常用的数据复制和高可用性解决方案。它允许将一个MySQL主服务器上的数据自动复制到多个从服务器上,从而提供了数据冗余备份、读写分离等优势。本文将详细介绍MySQL数据库主从复制的配置与管理。 1. 原理概述 MySQL主从复制是基于二进制日…...
Linux第49步_移植ST公司的linux内核第1步_获取linux源码
已知ST公司的linux源码路径: /home/zgq/linux/atk-mp1/stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24/sources/arm-ostl-linux-gnueabi/linux-stm32mp-5.4.31-r0 1、创建“my_linux”目录 打开第1个终端 输入“ls回车” 输入“cd linux/回车”,切换…...
怎样学习Windows下命令行编写
第一:Windows下命令行指的是cmd和powershell命令行编写 第二:必须要用好help或/?命令,这个命令是最基本的也是最常用的命令列表和语法查看命令 第三:cmd命令使用help查看命令列表或“一串带参数的命令 /?"(不…...
数据结构第十六天(二叉树层序遍历/广度优先搜索(BFS)/队列使用)
目录 前言 概述 接口 源码 测试函数 运行结果 往期精彩内容 前言 从前的日色变得慢,车,马,邮件都慢,一生,只够爱一个人。 概述 二叉树的层序遍历可以使用广度优先搜索(BFS)来实现。具体步骤如下&…...
6.s081 学习实验记录(八)Networking
文章目录 network driver network driver //TODO...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
深度学习水论文:mamba+图像增强
🧀当前视觉领域对高效长序列建模需求激增,对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模,以及动态计算优势,在图像质量提升和细节恢复方面有难以替代的作用。 🧀因此短时间内,就有不…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...
STM32---外部32.768K晶振(LSE)无法起振问题
晶振是否起振主要就检查两个1、晶振与MCU是否兼容;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容(CL)与匹配电容(CL1、CL2)的关系 2. 如何选择 CL1 和 CL…...
