C++核心编程--类篇

C++核心编程

1.内存分区模型

C++程序在执行时,将内存大方向分为4个区域

意义:不同区域存放数据,赋予不同的生命周期,更能灵活编程

  • 代码区:存放函数体的二进制代码,由操作系统进行管理的
  • 全局区:存放全局变量和静态变量以及常量
  • 栈区:由编译器自动分配释放,存放函数的参数值,局部变量等
  • 堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收

1.1、程序运行前

代码区

  1. 存放CPU执行的机器指令
  2. 代码区是共享的,共享的目的是为了频繁被执行的程序
  3. 代码区是只读的,防止程序以外地修改它的指令

全局区

  1. 全局变量静态变量存放在此
  2. 全局区包含了常量区
  3. 该区域数据在程序结束后操作系统自动释放

1.2、程序运行后

栈区

  1. 不要返回局部变量地址,栈区开辟的数据会被编译器自动释放

#include<iostream>
using namespace std;int* func() {int a = 10; //局部变量return &a; //返回局部变量的值
}int main() {int* p = func();cout << *p << endl; //编译器会自动保存一次正确的值cout << *p << endl;cout << *p << endl;system("pause");return 0;
}

image-20230830074906875

堆区:

  1. 由我们自己开辟内存,我们不结束程序,不会释放
#include<iostream>
using namespace std;int* fun() {//new关键字,可以将数据开辟到堆区int * a = new int(10);return a;
}int main() {int * p = fun();cout << *p << endl;cout << *p << endl;cout << *p << endl;system("pause");return 0;
}

image-20230830081237728

1.3、new关键字

在堆区中开辟数据,可以使用new关键字

利用new创建的数据,会返回该数据对应的类型的指针

语法: new 数据类型

  • 开辟数据后可以手动释放,利用delete

#include<iostream>
using namespace std;int* fun() {//new关键字,可以将数据开辟到堆区int * a = new int(10);return a;
}int main() {int * p = fun();cout << *p << endl;cout << *p << endl;//释放数据delete p;cout << *p << endl;system("pause");return 0;
}

image-20230830093101931

这里只会输出打印俩个P数据

image-20230830093204647

  1. 数组同理

语法 int * arr = new int[10];

delete [] arr

void fun() {//new关键字,可以将数据开辟到堆区//int * a = new int(10);//return a;int* arr = new int[10];for (int i = 0; i < 10; i++){arr[i] = i + 100;}for (int i = 0; i < 10; i++){cout << arr[i] << endl;}//删除数组delete [] arr;
}

2、引用

作用:给变量起别名

语法:数据类型 &别名 = 原名

注意:一旦初始化,不可以更改,不能再次修改别名指向另一个

本质:引用的本质在C++内部实现是个指针常量


#include<iostream>
using namespace std;
int main() {int a = 10;//给a取个别名bint &b = a;cout <<  b << endl;//利用别名修改a的值b = 100;cout << b << endl;system("pause");return 0;
}

image-20230830180236430

2.1、引用做函数参数

作用:函数传参时,可以利用引用的技术让形参修饰实参

优秀:可以简化指针修改实参

//交换
void swap01(int& a, int& b) {int temp = a;a = b;b = temp;
}#include<iostream>
using namespace std;
int main() {int a = 10;int b = 20;swap01(a, b);cout << "交换后A:" << a << endl;cout << "交换后B:" << b << endl;system("pause");return 0;
}

image-20230830182257758

2.2、引用做函数返回值

作用:作为返回值存在

注意:不要返回局部变量引用

用法:函数调用作为左值(左边的值)

  1. 返回局部变量情况(错误)
int& test02() {int a = 10;return a;
}
int main() {int& b = test02();cout << b << endl;//编译器会做一次预存,后面就会出错cout << b << endl;cout << b << endl;system("pause");return 0;
}

image-20230830183250939

  1. 正确做法

    int & test02() {static int a = 10; //静态变量,存放在全局区return a;
    }
    

image-20230830183513266

2.2、常量引用

用来修饰形参,防止误操作

//用来修饰形参
void printA(const int  & a) {//a = 100; 这里就不能修改acout << "值为:" << a << endl;
}

3、函数高级

3.1、函数的默认参数

语法: 返回值类型 函数名 (形参 = 默认值){}

//设置了俩个默认参数
int func(int a, int b = 10, int c = 30) {return a + b + c;
}int main() {int a = func(10);cout << a << endl;system("pause");return 0;
}

注意

  1. 设置默认参数从这个位置往后的每个参数都必须有默认参数,否则报错 这里的C也必须有默认参数

image-20230831171310436

  1. 如果函数声明有默认参数,函数实现就不可能有默认参数

声明和实现只能有一个有参数

//定义一个函数
//声明
int func2(int a = 10, int b = 10);
//实现
int func2(int a = 10, int b = 10) {return a + b;
}int main() cout << func2(10, 20) << endl;system("pause");return 0;
}

image-20230831171756539

3.2、函数占位参数

语法:返回值类型 函数名 (数据类型){}

void func(int a, int) {cout << "1111" << endl;
}
  1. 占位参数可以有默认值
void func(int a, int = 10) {cout << "1111" << endl;
}

3.3、函数重载概述

作用:函数名可以相同,提高复用性

函数重载的满足条件

  1. 同一作用域下
  2. 函数名称相同
  3. 函数参数类型不同 或者 个数不同 或者 顺序不同

注意:函数的返回值不可以作为函数重载的条件

#include<iostream>
using namespace std;//函数重载
//可以让函数名相同,提高复用性
//以下俩个均在全局作用域下
void func() {cout << "第一个方法" << endl;
}
//函数参数`类型不同`
void func(int a) {cout << "第二个方法" << endl;
}int main() {func();system("pause");return 0;
}

image-20230902092708718

根据传入的参数不同,可以调用不同的参数的相同名的方法

注意:函数的返回值不可以作为函数重载的条件

image-20230902093029689

3.3.1、函数重载的注意事项

  1. 引用作为重载条件

  2. 函数重载碰到函数默认参数

  • 引用作为重载条件
//引用做重载的条件
void func(int& a) {cout << "引用调用" << endl;
}void func(const int& a) {cout << "常量引用调用" << endl;
}int main() {int a = 10;func(a);//这里的直接插入10会生成一个临时变量赋给const int// int temp = 10;// const int  = temp;func(10);system("pause");return 0;
}

image-20230902100731340

  • 函数重载碰到函数默认参数
//函数重载碰到函数默认参数
void func2(int a, int b = 10) {cout << "方法1" << endl;
}
void func2(int a) {cout << "方法2" << endl;
}int main() {//这里会报错func2(10);system("pause");return 0;
}

image-20230902101024896

4、类和对象

c++面向对象的三大特征:封装、继承、多态

4.1、封装

意义:

  1. 将属性和行为作为一个整体,表现生活中的事务
  2. 将属性和行为加以权限控制
  3. 在设计类的时候,属性和行为写在一起,表现事务

语法: class 类名{ 访问权限: 属性 / 行为}

#include<iostream>
using namespace std;
//eg:设计一个圆的类 求圆的周长//定义常量
const double PI = 3.14;class  Cricle
{//访问权限 公共的
public://定义一个半径int m_r;//获取周长double CricleZC() {return 2 * PI * m_r;}
};int main() {//实例化 一个对象Cricle cr;//给对象属性赋值cr.m_r = 10;/cout << "周长为:" << cr.CricleZC() << endl;system("pause");return 0;
}
  • 可利用方法去间接修改属性的值
class Student {//访问权限
public:string name;int St_num;void pr_inf() {cout << "姓名:" << name << '\n' << "学号:" << St_num << endl;}//给姓名赋值void setName(string nm) {name = nm;}void setSt_num(int num) {St_num = num;}};

4.1.1、封装的访问权限

访问权限分为三种:

  1. public 公共权限
  2. protected 保护权限
  3. private 私有权限
  • public 公共权限--------类内可以访问 类外可以访问

  • protected 保护权限--------类内可以访问 类外不可以被访问 (子类可以访问父类的保护内容)

  • private 私有权限--------类内可以访问 类外不可以被访问 (子类不可以访问父类的私有内容)

class Person 
{
public://公共权限string m_Name;protected://保护权限string m_car;private://私有权限int m_id;
};int main() {Person p1;p1.m_Name = "zy";//类内可以访问 类外不可以被访问//p1.m_car = "zzz";//p1.m_id = 123445;system("pause");return 0;
}

image-20230907161711380

image-20230907161724052

4.1.2、struct和class区别

struct和class的唯一区别:默认访问的权限不同

  • struct 默认权限为公有
  • class 默认权限为私有
class C1 {int c1_age;
};struct C2
{int c2_age;
};int main() {C1 c1;//报错//c1.c1_age = 100;C2 c2;c2.c2_age = 100;system("pause");return 0;
}

image-20230907162608184

4.1.3、成员属性设置为私有

  1. 将所有成员属性设置为私有,可以自己控制读写
  2. 对于写权限,我们可以检测数据的有效性
#include<iostream>
#include<string>
using namespace std;class Person
{
public://定义获取设置名字方法,方便类外部使用string getName(){return p_name;}void setName(string name){p_name = name;}//可以根据传入值检测数据的有效性void setAge(int age) {//检测输入的值if (age<0||age>=150){//输入错误设置默认值,并使该方法失效p_age = 0;cout << "输入的值为错误值" << endl;return;}//如果上面检测不通过,不会执行该条语句p_age = age;}int getAge() {return p_age;}private:string p_name;int p_age;
};int main() {Person p1;p1.setName("zyy");p1.setAge(170);string name = p1.getName();int age = p1.getAge();cout << "姓名:" << name <<'\n' << "年龄:" << age << endl;system("pause");return 0;
}

image-20230907165744439

4.1.4、类练习题

  1. 设计立方体类
    • 求出立方体的面积和体积
    • 分别用全局函数和成员函数判断俩个立方体是否相等

image-20230907175049565

#include<iostream>
using namespace std;class Cuboid
{
public://获取面积int getCuboid_are(){//(长×宽+宽×高+长×高)×2 面积公式return ((m_H * m_L) + (m_H * m_W) + (m_L * m_W) * 2);}//获取体积int getCuboid_vol() {return m_H * m_L * m_W;}//设置长方体长宽高void setCuboid_H(int H){m_H = H;}void setCuboid_L(int L){m_L = L;}void setCuboid_W(int W){m_W = W;}//获取长方体的长宽高int getCuboid_H() {return m_H;}int getCuboid_L() {return m_L;}int getCuboid_W() {return m_W;}//利用成员函数判断是否相等//这里只传c2 因为类已经存了一个立方体的数下,再更另一个作对比//谁调用这个函数就传另一个  c1.isEq2(c2);bool isEq2(Cuboid& c2) {if (m_H == c2.getCuboid_H() && m_L == c2.getCuboid_L() && m_W == c2.getCuboid_W()){return 1;}return 0;}private://定义长方体的长宽高int m_H;int m_L;int m_W;
};//全局判断是否相等 传入地址节约内存
bool isEq(Cuboid &c1,Cuboid &c2) {if (c1.getCuboid_H() == c2.getCuboid_H()&&c1.getCuboid_L()==c2.getCuboid_L()&&c1.getCuboid_W() == c2.getCuboid_W()){return 1;}return 0;
}int main() {Cuboid c1,c2;c1.setCuboid_H(10);c1.setCuboid_L(10);c1.setCuboid_W(10);	c2.setCuboid_H(10);c2.setCuboid_L(10);c2.setCuboid_W(10);int area = c1.getCuboid_are();int vol = c1.getCuboid_vol();cout << "area:" << area << '\n' << "vol:" << vol << endl;//利用全局函数判断是否相等bool flag =  isEq(c1, c2);cout << flag << endl;//利用c1的属性去对比c2bool flag2 = c1.isEq2(c2);cout << flag2 << endl;system("pause");return 0;
}
  1. 点和圆的关系
    • 设计一个圆形类(Circle),和一个点类(Point),计算点和圆的关系

image-20230908092919384

#include<iostream>
using namespace std;class Point {
public://设置X坐标和Y坐标void setPoint_X(int x) {p_X = x;}void setPoint_Y(int y) {p_Y = y;}//获取X坐标和Y坐标int getPoint_X() {return p_X;}int getPoint_Y() {return p_Y;}private://定义X坐标和Y坐标int p_X;int p_Y;
};class Circle {
public://设置圆心和半径void setCircle_R(int R) {c_R = R;}void setCircle_XY(int X,int Y) {c_P.setPoint_X(X);c_P.setPoint_Y(Y);}//获取圆心和半径int getCircle_R() {return c_R;}int getCircle_X() {return c_P.getPoint_X();}int getCircle_Y() {return c_P.getPoint_Y();}//判断点和圆的关系int  isEq(Point p) {//获取点到圆心的距离int distance =(c_P.getPoint_X() - p.getPoint_X()) * (c_P.getPoint_X() - p.getPoint_X()) +(c_P.getPoint_Y() - p.getPoint_Y()) * (c_P.getPoint_Y() - p.getPoint_Y());int rDistance = c_R * c_R;// 1点在圆上,2点在圆外,3点在内if (distance == rDistance){cout << "圆上" << endl;return 1;}else if (distance > rDistance) {cout << "圆外" << endl;return 2;}else{cout << "圆内" << endl;return 3;}}private://定义半径和圆心int c_R;//在内中可以让另一个类作为本类中的成员Point c_P;
};int main() {Circle c1;//设置半径和圆心c1.setCircle_R(10);c1.setCircle_XY(10, 0);//创建点Point p;p.setPoint_X(10);p.setPoint_Y(10);int a = c1.isEq(p);cout << a << endl;system("pause");return 0;
}

4.1.5、类的拆分

基于上面练习题做一个拆分

  1. 在头文件中创建一个.h后缀的头文件

image-20230908093526535

  1. 在源文件中创建一个.cpp后缀的源文件

image-20230908094439218

  1. point.h中只需要成员函数的声明和成员变量的声明。

image-20230908094603435

//防止头文件重复包含,避免名称冲突
#pragma once
#include<iostream>
using namespace std;class Point {
public://设置X坐标和Y坐标void setPoint_X(int x);void setPoint_Y(int y);//获取X坐标和Y坐标int getPoint_X();int getPoint_Y();
private://定义X坐标和Y坐标int p_X;int p_Y;
};
  1. point.cpp源文件中只需要留住所有函数的实现就可以

注意这里如果直接写会报错需要告诉编译器是哪个作用域下面的函数

image-20230908095215386

#include "point.h"//设置X坐标和Y坐标//Point::告诉编译器是Point作用域下面的函数void Point::setPoint_X(int x) {p_X = x;}void Point::setPoint_Y(int y) {p_Y = y;}//获取X坐标和Y坐标int Point::getPoint_X() {return p_X;}int Point::getPoint_Y() {return p_Y;}
  1. 同理实现Circle的拆分

这里如果涉及到引用其他类需要include引用一下

image-20230908095716045

  • Circle.h
#pragma once
#include <iostream>
#include "point.h"
using namespace std;class Circle {
public://设置圆心和半径void setCircle_R(int R);void setCircle_XY(int X, int Y);//获取圆心和半径int getCircle_R();int getCircle_X();int getCircle_Y();//判断点和圆的关系int  isEq(Point p);private://定义半径和圆心int c_R;//在内中可以让另一个类作为本类中的成员Point c_P;
};
  • Circle.cpp
#include "Circle.h"//设置圆心和半径void Circle::setCircle_R(int R) {c_R = R;}void Circle::setCircle_XY(int X, int Y) {c_P.setPoint_X(X);c_P.setPoint_Y(Y);}//获取圆心和半径int Circle::getCircle_R() {return c_R;}int Circle::getCircle_X() {return c_P.getPoint_X();}int Circle::getCircle_Y() {return c_P.getPoint_Y();}//判断点和圆的关系int  Circle::isEq(Point p) {int distance =(c_P.getPoint_X() - p.getPoint_X()) * (c_P.getPoint_X() - p.getPoint_X()) +(c_P.getPoint_Y() - p.getPoint_Y()) * (c_P.getPoint_Y() - p.getPoint_Y());int rDistance = c_R * c_R;// 1点在圆上,2点在圆外,3点在内if (distance == rDistance){cout << "圆上" << endl;return 1;}else if (distance > rDistance) {cout << "圆外" << endl;return 2;}else{cout << "圆内" << endl;return 3;}}
  1. 在想要用这个源文件中直接引用就可以使用了
#include<iostream>
using namespace std;
#include "point.h"
#include "Circle.h"int main() {Circle c1;//设置半径和圆心c1.setCircle_R(10);c1.setCircle_XY(10, 0);//创建点Point p;p.setPoint_X(10);p.setPoint_Y(10);int a = c1.isEq(p);cout << a << endl;system("pause");return 0;
}

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

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

相关文章

Vue3+Element Plus实现el-table跨行显示(非脚手架)

Vue3Element Plus实现el-table跨行显示 app组件内容使用:span-method"objectSpanMethod"自定义方法实现跨行显示查询方法初始化挂载新建一个html即可进行测试&#xff0c;完整代码如下效果图 app组件内容 <div id"app"><!-- 远程搜索 --><e…

算法训练day43|动态规划 part05:0-1背包 (LeetCode 1049. 最后一块石头的重量 II、494. 目标和、474.一和零)

文章目录 1049. 最后一块石头的重量 II思路分析代码实现 494. 目标和思路分析动规方法代码实现总结思考 474.一和零思路分析代码实现思考总结 var code "57a5e730-4e5e-43ad-b567-720d69f0371a"1049. 最后一块石头的重量 II 题目链接&#x1f525;&#x1f525; 有…

揭秘拼多多API接口:让商家和用户实现高效连接与便捷操作

随着电商行业的飞速发展&#xff0c;拼多多作为一家新兴电商平台&#xff0c;近年来已逐渐成为市场的焦点。为了满足商家和用户的需求&#xff0c;拼多多不断创新&#xff0c;推出了智能化的API接口&#xff0c;以实现更加高效、便捷的操作和管理。本文将深入探讨拼多多API接口…

提高使用VS Code工作效率的技巧

提高使用VS Code工作效率的技巧 时间轴视图&#xff1a;本地源代码控制 时间轴视图为我们提供了内置的源代码控制。 我们中的许多人都知道 Git 和其他源代码控制工具有多么有用&#xff0c;它们可以帮助我们轻松跟踪文件更改并在需要时恢复到之前的状态。 因此&#xff0c;…

go基础08-map的内部实现

和切片相比&#xff0c;map类型的内部实现要复杂得多。Go运行时使用一张哈希表来实现抽象的map类型。运行时实现了map操作的所有功能&#xff0c;包括查找、插入、删除、遍历等。在编译阶段&#xff0c;Go编译器会将语法层面的map操作重写成运行时对应的函数调用。 下面是大致的…

YOLOV7改进-添加Deformable Conv V2

可变形卷积link class DCNv2(nn.Module):def __init__(self, in_channels, out_channels, kernel_size, stride1,padding1, groups1, actTrue, dilation1, deformable_groups1):super(DCNv2, self).__init__()self.in_channels in_channelsself.out_channels out_channelsse…

QT for andriod

QT for andriod 开发 apk软件&#xff0c;因为一些特殊的原因&#xff0c;在这里简单的记录一哈自己开发apk的流程和心得。 首先说明我采用的环境有哪些&#xff1f; 1、QT的版本&#xff0c;个人建议5.15.2的版本及以上&#xff0c;我是用的5.15.2。 2、andriod studio 可以…

3D数据导出工具HOOPS Publish:3D数据查看、生成标准PDF或HTML文档!

HOOPS中文网http://techsoft3d.evget.com/ 一、3D导出SDK HOOPS Publish是一款功能强大的SDK&#xff0c;可以创作丰富的工程数据并将模型文件导出为各种行业标准格式&#xff0c;包括PDF、STEP、JT和3MF。HOOPS Publish核心的3D数据模型是经过ISO认证的PRC格式(ISO 14739-1:…

STM32移植FAT文件系统

所谓“移植”&#xff0c;就是打通FAT源码和物理设备之间的软件接口。 FAT源码早就被公益组织给写好了&#xff0c;直接下载源码。但是FAT作为顶层应用程序&#xff0c;它需要面对的底层物理设备是不确定的&#xff0c;那么底层的物理设备驱动程序就需要程序员来自己写。物理设…

Android:基于mvvm框架使用viewPage

一、前言&#xff1a; 最近在学习viewpage的使用&#xff0c;加上一直以来用mvvm框架。就想着记录一下。 二、代码展示&#xff1a; 1.引入依赖 //viewPage2引用(微信左右滑动页面)implementation androidx.viewpager2:viewpager2:1.0.0 2.在xml中的使用 3.在代码中找到vie…

脚本:python实现樱花树

文章目录 代码效果 代码 from turtle import * from random import * from math import * def tree(n, l):pd () # 下笔# 阴影效果t cos ( radians ( heading () 45 ) ) / 8 0.25pencolor ( t, t, t )pensize ( n / 3 )forward ( l ) # 画树枝if n > 0:b random () *…

算法通关村第12关【黄金】| 字符串冲刺题

1.最长公共前缀 思路&#xff1a;纵向比较&#xff0c;每个字符串从头挨个比较 class Solution {public String longestCommonPrefix(String[] strs) {StringBuilder sb new StringBuilder();for(int i 0;i<strs[0].length();i){char c strs[0].charAt(i);for(int j 1;j…

Qt实现图书管理系统(C++)

文章目录 数据库表的实现创建表将powerDesigner里面的表导出成xxx.sql脚本将SQL文件导入数据库创建表 图书管理系统思维导图创建工程开发阶段创建Dlg_login登录页面login页面样式主页页面布局主函数测试login设置logo打包程序子页面的样子将子页面放到StackedWidget里面按钮直接…

Python学习 -- logging模块

logging 模块是 Python 中用于记录日志的标准库&#xff0c;它提供了丰富的功能&#xff0c;可以帮助开发者进行日志记录和管理。以下是关于logging模块的详细使用方式&#xff0c;包括日志级别、处理流程、Logger 类、Handler 类、Filter 类、Formatter 类以及模块中常用函数等…

shell入门运算符操作、条件判断

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a; 小刘主页 ♥️努力不一定有回报&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️学习两年总结出的运维经验&#xff0c;以及思科模拟器全套网络实验教程。专栏&#xf…

PCIe 5.0验证实战,经常遇到的那些问题?

PCIe 5.0是当前最新的PCI Express规范&#xff0c;提供了更高的数据传输速率和更大的带宽。 PCIe是连接两个芯片的接口&#xff0c;负责两个芯片通信, 连接芯片的通路为高速SerDes, 称之为链路。PCIe确保通路正常-链路训练状态机。PCIe在芯片内部是非常重要的一个大的模块&…

YOLOv5改进算法之添加CA注意力机制模块

目录 1.CA注意力机制 2.YOLOv5添加注意力机制 送书活动 1.CA注意力机制 CA&#xff08;Coordinate Attention&#xff09;注意力机制是一种用于加强深度学习模型对输入数据的空间结构理解的注意力机制。CA 注意力机制的核心思想是引入坐标信息&#xff0c;以便模型可以更好地…

大数据课程K20——Spark的SparkSQL概述

文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 了解Spark的SparkSQL由来; ⚪ 了解Spark的SparkSQL特点; ⚪ 了解Spark的SparkSQL优势; ⚪ 掌握Spark的SparkSQL入门; 一、SparkSQL概述 1. 概述 Spark为结构化数据处理引入了一个称…

STM32单片机OLED贪吃蛇游戏记分计时

实践制作DIY- GC00165---OLED贪吃蛇游戏 一、功能说明&#xff1a; 基于STM32单片机设计---OLED贪吃蛇游戏 二、功能说明&#xff1a; STM32F103C系列最小系统板0.96寸OLED显示器上、下、左、右4个按键 1.通过OLED配合按键实现贪吃蛇游戏 2.可以上下左右移动。 3.可以统计显…

golang-bufio 缓冲写

1. 缓冲写 在阅读这篇博客之前&#xff0c;请先阅读上一篇&#xff1a;golang-bufio 缓冲读 // buffered output// Writer implements buffering for an io.Writer object. // If an error occurs writing to a Writer, no more data will be // accepted and all subsequent…