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...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
