类和对象的创建和实例化

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()
{//第一种 实例化一个People1People1 people1;people1.walk();people1.play();people1.study();cout << endl;//第二种 实例化一个People1People1* 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
//第二种 实例化一个People1People1* 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默认构造函数:

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java】MybatisPlus

MybatisPlus MybatisPlus是在mybatis基础上的一个增强型工具。它对mybatis的一些操作进行了简化&#xff0c;能够提高开发的效率。 springboot整合了mybatis之后&#xff0c;其实已经非常方便了&#xff0c;只需要导入mybatis的包后&#xff0c;在配置文件中编写数据源信息&a…

10个得心应手的数据网站,助你完成数据科学项目

本文将介绍10个获取所需数据的网站&#xff0c;助力数据科学项目。 当你的数据对你来说很枯燥或毫无意义时&#xff0c;要激励自己学习数据科学&#xff0c;或做数据科学项目真的很困难。 本文将介绍10个得心应手的网站&#xff0c;在这些网站上你可以为数据科学项目获取一些非…

计算机视觉基础(12)——图像恢复

前言 我们将学习图像恢复相关知识。主要有图像恢复的定义、评价标准和实现图像恢复的方法。图像恢复任务包括图像去噪、去模糊、图像超分辨率、图像修复等&#xff1b;评价标准有峰值信噪比和结构相似性&#xff1b;图像超分辨的方法有传统方法和基于深度学习的方法&#xff1a…

[Ray Tracing: The Next Week] 笔记

前言 本篇博客参照自《Ray Tracing: The Next Week》教程&#xff0c;地址为&#xff1a;https://raytracing.github.io/books/RayTracingTheNextWeek.html 该教程在ray tracing in one weekend的基础上&#xff0c;增加了运动模糊、BVH树、Texture映射、柏林噪声、光照、体积…

做外贸其实也并没有那么容易

最近无意中看到一个视频&#xff0c;视频的内容是外贸博主和一个连线人的对话&#xff0c;连线人的诉求是如何做外贸&#xff1f;怎么能把外贸做好&#xff0c; 通过博主和这个人的沟通来看&#xff0c;这个连线的人他从来没有接触过外贸&#xff0c;也不愿意去别的外贸公司上…

【Vulnhub 靶场】【Funbox: Under Construction!】【简单】【20210719】

1、环境介绍 靶场介绍&#xff1a;https://www.vulnhub.com/entry/funbox-under-construction,715/ 靶场下载&#xff1a;https://download.vulnhub.com/funbox/Funbox10.ova 靶场难度&#xff1a;简单 发布日期&#xff1a;2021年07月19日 文件大小&#xff1a;1.3 GB 靶场作…

宋仕强论道之华强北山寨手机(三十)

要研究透彻深圳华强北&#xff0c;华强北的“山寨手机”是绕不过去的话题。它来的轰轰烈烈&#xff0c;造就华强北几十个亿万富翁&#xff0c;去的鼠头蛇尾留下一地鸡毛。其兴也勃焉&#xff0c;其亡也忽焉&#xff01;在华强北留下了财富的传奇故事&#xff0c;和失意者发疯跳…

ClickHouse 入门与实战教程

目录 1. ClickHouse 简介 什么是 ClickHouse&#xff1f; ClickHouse 的优势和特点 适用场景 2. 安装 ClickHouse 3. ClickHouse 的基本概念 4. ClickHouse 的基本操作 创建数据库和表、插入和查询数据 使用 MergeTree 引擎处理时序数据 管理分区 创建带有分区的 Mer…

RPA数据统计与展示

随着企业RPA机器人部署规模越来越庞大&#xff0c;更需要完善精细的管理与规划。这些进行自动化工作的数字员工&#xff0c;就像是传统的真实员工一样&#xff0c;也需要对日常的工作做好管理&#xff0c;对未来的发展做好规划&#xff0c;要实现这点&#xff0c;首先需要对RPA…

高精度电流源原理是什么

高精度电流源是一种能够提供准确、稳定的电流输出的设备。它被广泛应用于工业自动化、科学研究和仪器仪表等领域&#xff0c;用于检测、校准和驱动其他设备。 高精度电流源的原理是基于反馈控制和精密电路设计。下面西安安泰电子将详细介绍高精度电流源的原理。 高精度电流源包…

智能优化算法应用:基于金豺算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于金豺算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于金豺算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.金豺算法4.实验参数设定5.算法结果6.参考文献7.MA…

云卷云舒:面向业务的智能运维(中)

接着聊&#xff1a;云卷云舒&#xff1a;面向业务的智能运维&#xff08;上&#xff09; 4、业务智能运维体系架构 4.1 智能运维核心要素 智能运维体系架构的建设应该考虑如下因素&#xff1a; 数据 我们要搭建智能运维平台&#xff0c;首先要数据驱动&#xff0c;数据驱动…