类和对象的创建和实例化

1. 类的概述

1.1 具体示例


	类是描述一类事物的特征和行为的统称,抽象的不存在的,泛指的概念,例如:描述一个人,从外观上(特征)和言行举止(行为)上进行描述
	外观上(特征):
		长头发
		蓝牙眼睛
		白皮肤
		带了美瞳
		年龄多大
		身高
		体重
		.....
	言行举止(行为):
		走路
		跑步
		说话
		学习
		打游戏
		.......

1.2 对象

是指类的实例化(实实在在存在的),是特指的概念,例如:人类实例化对象张三、李四、王二等等

1.3 程序来描述

关键字:class   -------描述一个类
格式:
	class    类名
	{
		//外观---特征
		长头发
		蓝牙眼睛
		白皮肤
		带了美瞳
		年龄多大
		身高
		体重
		.....
		//言行举止----行为
		走路
		跑步
		说话
		学习
		打游戏
		.......
	};

例如:
	class   People
	{
		//特征
		int  eyes;
		int age;
		int height;
		int weight;
		char name[20];
		.....
		//行为
		void walk()
		{}
		void run()
		{}
		void play()
		{}
		void study()
		{}
		..........
	};

特征(属性):

指的是变量,称为类的成员变量

行为(方法):

指的是函数,称为类的成员函数

类的成员:

包含了成员变量和成员函数

1.4 创建类

1.4.1 第一种方式,直接在主程序文件中创建类

main.c
#include "iostream"
using namespace std;

//第一种方式,直接在主程序文件中创建类
class People1
{
	int age;//年龄
	int height;//身高
	char name[20];//姓名
	//函数的实现第一种方式:在类中实现函数
	void walk()//走路的行为
	{
		cout << "走路" << endl;
	}
	void play()//玩的行为
	{
		cout << "玩耍" << endl;
	}
	void study();//学习
};
//函数的实现第二种方式:在类外实现函数
/*
格式:
	函数返回值类型    类名  ::函数名(参数列表)
	{
		//代码
	}
*/

void People1::study()
{
	cout << "学习" << endl;
}


int main()
{

	return 0;
}

1.4.2 分模块创建

People2.h
#pragma once
#include "iostream"
using namespace std;

class People2
{
	int age;
	int height;
	char name[20];

	void walk()
	{
		cout << "走路" << endl;
	}
	void study()
	{
		cout << "学习" << endl;
	}

	//这个函数的实现我们换一种方式实现,我们放在people2.cpp中实现
	void play_game();


};

People2.cpp
#include "People2.h"
/*
格式:
	函数返回值类型    类名  ::函数名(参数列表)
	{
		//代码
	}
*/
void  People2::play_game()
{
	cout << "玩游戏" << endl;
}

2. 实例化的两种方式

是指类的实例化(实实在在存在的),是特指的概念,例如:人类实例化对象张三、李四、王二等等

实例化的两种方式:

2.1 在栈区进行实例化

格式:

类名对象名; //类名和对象名就是标识符, 满足语法规范

例如:

People zhangsan ; //实例化zhangsan对象

People lisi;          

2.1.1 通过类的对象去进行访问

(1)对象是在栈区实例化

符号:“.”

格式:

对象名  .    成员 ;  //访问类的成员

例如:

zhangsan.height=180;

zhangsan.walk();

main.cpp
#include "iostream"
using namespace std;

//类和对象实例化

//第一种方式,直接在主程序文件中创建类
class People1
{
public:
	int age;//年龄
	int height;//身高
	char name[20];//姓名
	//函数的实现第一种方式:在类中实现函数
	void walk()//走路的行为
	{
		cout << "走路" << endl;
	}
	void play()//玩的行为
	{
		cout << "玩耍" << endl;
	}
	void study();//学习
};
//函数的实现第二种方式:在类外实现函数
/*
格式:
	函数返回值类型    类名  ::函数名(参数列表)
	{
		//代码
	}
*/

void People1::study()
{
	cout << "学习" << endl;
}


int main()
{
	//第一种 实例化一个People1
	People1 people1;
	people1.walk();
	people1.play();
	people1.study();
	cout << endl;

	//第二种 实例化一个People1
	People1* people2 = new People1;
	people2->walk();
	people2->play();
	people2->study();


	return 0;
}

2.2 在堆区进行实例化

格式: .

类名  对象名   new  类名; //在堆区开辟类大小的空间,并用对象指向该空间

People* zhangsan = new People    //注意释放空间:delete zhangsan

2.2.1 如何访问类的成员

(2)对象是在堆区实例化

符号:“->”

格式:

对象名 ->  成员 ;//访问类的成员

例如:

zhangsan->height=180;

zhangsan->walk();

main.cpp
//第二种 实例化一个People1
	People1* people2 = new People1;
	people2->walk();
	people2->play();
	people2->study();

#include <iostream>
using namespace std;

class MyClass {
public:
    MyClass() {
        // 无参构造函数的实现
    }

    void setValue(int value) {
        data = value;
    }

    void display() {
        cout << "Value: " << data << endl;
    }


    int data;
};

int main() {
    // 在堆上创建对象
    MyClass* ptr = new MyClass();

    // 为成员变量赋值
    ptr->setValue(42);
    ptr->display();
    ptr->data = 50;
    ptr->display();

    // 释放对象所占用的内存
    delete ptr;

    return 0;
}

2.3 面试题:结构体和类的区别是什么?

仅供参考

1. 默认访问权限:

在结构体中,默认的成员访问权限是公共的(public)。

在类中,默认的成员访问权限是私有的(private)。

2成员函数:

在结构体中,你可以包含成员函数,但这些函数默认是公共的。

在类中,你可以有公共、私有和受保护的成员函数,具体取决于你在类定义中的声明。

3继承:

在结构体中,可以进行继承,但默认继承权限是公共的。

在类中,可以进行公共、私有和受保护的继承,具体取决于你在类定义中的声明。

4默认构造函数:

在结构体中,如果没有提供构造函数,会有一个默认的构造函数。

在类中,如果没有提供构造函数,也会有一个默认的构造函数,但是如果你提供了自定义构造函数,那么默认构造函数就不再提供。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

智能安全配电装置在临时展会场所中的应用

贾丽丽 安科瑞电气股份有限公司 上海嘉定 201801 【摘要】简述了商场临时展会、展摊等场所中电气装置用电的特性&#xff0c;针对此类场所中隐含的电气安全隐患问题&#xff0c;结合智能安全配电装置的功能&#xff0c;从用电设备的接地、线路的安装与敷设、设备的维护和管理…

LaTex插入图片

一、插入图片 在.tex文件开头导入相应的宏包 \documentclass{article} \usepackage{graphicx} % 导入图像的宏包、单图 \usepackage{subfigure} % 导入图像的宏包、子图 \graphicspath{{./images/}} % 告诉 LaTeX 这篇文档中的图片所存储的位置是主文档所在目录下的 images 文…

【XR806开发板试用】系列之二:出现已经成功编译,但是无法生成镜像文件的问题

本文主要对于编译成功但是烧录出现问题进行解决&#xff0c;用Hello world 和LED点亮代码作为示范 文章仅为参考网络资料和自身理解&#xff0c;如有不正确之处请多指正 首先确定自己根目录在哪&#xff0c;我们都在根目录进行hb set和hb build -f,判断方法是寻找ohos_config.…

为什么要出现并发?并发的三要素

大家好&#xff0c;我是"java继父"伯约&#xff0c;假如这篇对大家有帮助的话求一个赞&#xff0c;另外文章末尾放了我从小白到架构师多年的学习资料。 1.为什么需要多线程 众所周知&#xff0c;CPU、内存、I/O 设备的速度是有极大差异的&#xff0c;为了合理利用 C…

CentOS环境下Nacos2.3集成PostgreSQL

title: CentOS环境下Nacos2.3集成PostgreSQL date: 2023-12-21 19:15:00 categories: Nacos description: CentOS环境下Nacos2.3集成PostgreSQL 1. 目录 1. 目录2. 简介3. 安装部署 3.1. 部署模式3.2. 环境准备3.3. 下载安装文件3.4. PostgreSQL插件 3.4.1. 下载地址3.4.2. 结…

圆中点算法

中心在原点&#xff0c;半径为 R 的圆的隐式函数方程为 F ( x , y ) x 2 y 2 − R 2 0 F(x, y) x^2 y^2 - R^2 0 F(x,y)x2y2−R20 把像素上的点的坐标代入上述隐式方程 八分法画圆算法 利用坐标轴和与坐标轴夹角 45 度的直线 原理 假设圆弧起点 x 0 x0 x0&#xff0…

经典文献阅读之--RenderOcc(使用2D标签训练多视图3D Occupancy模型)

0. 简介 3D占据预测在机器人感知和自动驾驶领域具有重要的潜力&#xff0c;它将3D场景量化为带有语义标签的网格单元。最近的研究主要利用3D体素空间中的完整占据标签进行监督。然而&#xff0c;昂贵的注释过程和有时模糊的标签严重限制了3D占据模型的可用性和可扩展性。为了解…

SQL Server的权限设置

实验环境&#xff08;实验案例一&#xff09; 某公司部署了 SQL Server 2016用来存储网站数据&#xff0c;由系统管理员进行维护.在bdon数据库中 已创建了class表。 需求描述 赋予用户zhangsan在bdqn数据库中创建表的权限和对class表查询和更新数据的权限。

ASP.NET Core 中的应用启动

ASP.NET Core 中的应用启动 | Microsoft Learnhttps://learn.microsoft.com/zh-cn/aspnet/core/fundamentals/startup?viewaspnetcore-8.0 目录 使用 Startup 筛选器扩展 Startup 在启动时从外部程序集添加配置 Startup、ConfigureServices 和 Configure 作者&#xff1a;…

每日一题——LeetCode141.环形链表

个人主页&#xff1a;白日依山璟 专栏&#xff1a;Java|数据结构与算法|每日一题 文章目录 1. 题目描述示例1&#xff1a;示例2&#xff1a;示例3&#xff1a;提示: 2. 思路3. 代码 1. 题目描述 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某…

041、基于CNN的样式迁移

之——基于CNN的滤镜 目录 之——基于CNN的滤镜 杂谈 正文 1.基于CNN的样式迁移 2.实现 杂谈 通过CNN的特征提取&#xff0c;可以实现将一个图片的样式模式特征迁移到另一张图像上。 正文 1.基于CNN的样式迁移 就是在某些层的输出上用其他的图片进行监督。 2.实现 一般来…

国际会议口译,选择同传好还是交传好

在国际会议中&#xff0c;同传与交传是常见的两种翻译方式&#xff0c;它们各自承载着独特的使命与优势&#xff0c;为沟通世界发挥着不可替代的作用。那么&#xff0c;同传好还是交传好&#xff0c;如何选择合适的翻译方式&#xff1f; 首先&#xff0c;从费用角度来看&#x…

苹果怎么调字体大小?详细教程在这,赶快get起来!

在我们使用苹果手机时&#xff0c;可能会遇到需要调整字体大小的情况。合适的字体大小能够提高阅读体验和舒适度&#xff0c;使得手机使用更加便捷。然而&#xff0c;还有很多用户并不知道苹果怎么调字体大小。别着急&#xff01;本文将为您详细介绍操作方法&#xff0c;帮助您…

云计算与大数据之间的羁绊(期末不挂科版):云计算 | 大数据 | Hadoop | HDFS | MapReduce | Hive | Spark

文章目录 前言&#xff1a;一、云计算1.1 云计算的基本思想1.2 云计算概述——什么是云计算&#xff1f;1.3 云计算的基本特征1.4 云计算的部署模式1.5 云服务1.6 云计算的关键技术——虚拟化技术1.6.1 虚拟化的好处1.6.2 虚拟化技术的应用——12306使用阿里云避免了高峰期的崩…

selenium模块有哪些用途?

Selenium模块是一个用于Web应用程序测试的模块&#xff0c;具有多种示例用法。以下是一些示例&#xff1a; 1.打开网页并执行一些基本操作&#xff0c;如点击按钮、输入文本等。 定位网页元素并执行操作&#xff0c;例如使用 find_element 方法查找单个元素&#xff0c;使用 f…

zabbix-邮件告警与钉钉机器人告警

zabbix-邮件告警 在部署邮件告警前需要先将zabbix部署成功 邮件告警需要得到邮箱的授权码&#xff0c;这里将以qq邮箱为例。 1.获取邮箱的授权码 2.编辑Email的相关信息 3.测试Email是否配置成功 测试成功。 4.为用户添加邮箱报警服务 5.创建主机群组、主机、监视项、触…

苹果ipad怎么录屏?让小白也能轻松上手

随着科技的发展&#xff0c;越来越多的用户使用苹果ipad进行工作、学习和娱乐。在使用过程中&#xff0c;难免会遇到需要录屏的情况&#xff0c;如录制游戏过程、教程讲解等。在本篇文章中&#xff0c;我们将详细介绍苹果ipad怎么录屏&#xff0c;帮助您轻松记录ipad屏幕上的精…

Unity程序向Web服务器发送数据

Unity程序向Web服务器发送数据 一、介绍二、HTTP协议三、新建Unity工程&#xff0c;创建脚本1.新建Unity工程&#xff0c;创建脚本WebManager.cs&#xff0c;将其指定给场景中的任意游戏体。2.在WebManager.cs中添加一个m_info属性和OnGUI函数显示UI&#xff1a; 四、GET请求在…

免费福利马上截止!深圳的户外小伙伴别错过!COSP2024体育展来了

COSP2024户外博览会 展会时间&#xff1a;2024年3月14-16日 展会地址&#xff1a;深圳福田会展中心 户外运动爱好者不可错过&#xff01; COSP2024户外博览会不仅可以逛展 看各种露营装备、户外器材 还有各种沙龙、峰会活动 就在明年开年&#xff0c;阳春三月天&#xf…

服务器扩容未生效、不成功:解决方法

记一次解决服务器扩容未生效的解决办法 老板&#xff1a;失忆啊&#xff0c;我花钱给服务器扩容了10000000G&#xff0c;但是数据库和mq都还是用不了&#xff0c;到底是不是服务器磁盘满了&#xff0c;你到底有没有查一下什么原因导致服务用不了啊。 失忆&#xff1a;老板您确…