当前位置: 首页 > news >正文

三站合一的网站怎么做教程做贷款行业哪些网站能发布广告

三站合一的网站怎么做教程,做贷款行业哪些网站能发布广告,外汇网站怎么做优化,wordpress添加媒体在角落1. 类的定义 1.1 类定义格式 • class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后⾯分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量; 类中的函数称为类的⽅法或者成员函数。…

3e78cdbc5474468196586ac4cad9c377.png

1. 类的定义

1.1 类定义格式

• class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后⾯分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量; 类中的函数称为类的⽅法或者成员函数。

语法:class{//成员,行为...};

• 为了区分成员变量,⼀般习惯上成员变量会加⼀个特殊标识,如成员变量前⾯或者后⾯加_ 或者 m开头,注意C++中这个并不是强制的,这个只是⼀些惯例。

• C++中struct也可以定义类,C++兼容C中struct的⽤法,同时struct升级成了类,struct用法和class一样(区别在访问限定符中),但⼀般情况下我们还是推荐⽤class定义类。

• 定义在类⾯的成员函数默认为inline(内联)。所以在实现复杂的程序中我们对于一些简单且调用多的函数我们直接在类里面定义,而复杂一些的函数则,在类里面声明,在对应的源文件里面定义。

eg:简单定义一个日期类

#include <iostream>
using namespace std;
class Date
{//行为void Prin(){;}
void Inin(int x,int y,int z)
{_day=x;_year=y;_month=z;
}//成员int _day;int _year;int _month;//....
};

定义完了之后又如何调用呢?而调用之前我们需要了解访问限定符。

1.2 访问限定符

3983392072b541a88947d1eae876235c.png

注:本文重点介绍public和private,protected以后再讲,就本文而言private,protected用法一致,没有区别。

• C++⼀种实现封装的⽅式,⽤类将对象的属性与⽅法结合在⼀块,让对象更加完善,通过访问权限选择性的将其接⼝提供给外部的用户⽤。

• public修饰的成员在类外可以直接被访问;protected和private修饰的成员在类外不能直接被访问,protected和private是⼀样的。

• 访问权限作⽤域从该访问限定符出现的位置开始直到下⼀个访问限定符出现时为⽌,如果后⾯没有访问限定符,作⽤域就到 }即类结束。

• class定义成员没有被访问限定符修饰时默认为private,struct默认为public。

• ⼀般成员变量都会被限制为private/protected,需要给别⼈使⽤的成员函数会放为public。

eg:上面日期类再完善

#include <iostream>
using namespace std;
class Date
{
public://行为void Prin(){	;}void Inin(int x,int y,int z)
{_day=x;_year=y;_month=z;
}
private://成员int _day;int _year;int _month;
};
int main()
{Date d1;return 0;
}

当不加private时可以访问到的对象

458bb8c776c443c0bea9edc48110f2b1.png

加private时可以访问到的对象

30b2df46b80646c8987ea11e362acff6.png

当我们有不希望别人修改或者不希望别人直接修改(只能通过我提供的路径修改),就⽤private。⼀般成员变量都会被限制为private/protected,需要给别⼈使⽤的成员函数会放为public。

1.3 类域

• 类定义了⼀个新的作⽤域,类的所有成员都在类的作⽤域中,在类体外定义成员时,需要使⽤ :: 作⽤域操作符指明成员属于哪个类域。

• 类域影响的是编译的查找规则,下⾯程序中Init如果不指定类域,那么编译器就把它当成全

局函数,那么编译时,找不到array等成员的声明/定义在哪⾥,就会报错。指定类域,就是知

道它是成员函数,当前域找不到的它时,就会到类域中去查找。

这个往往用在定义和声明分开的时候。

eg:上面日期类获取年函数在类里面声明,在类外面定义

class Date
{
public://行为void Prin(){	;}int Getyear();
private://成员int _day;int _year;int _month;
};int Date::Getyear()
{;
}

2类的实例化

2.1 实例化概念

• ⽤类类型在物理内存中创建对象的过程,称为类实例化出对象。

• 类是对象进⾏⼀种抽象描述,是⼀个模型⼀样的东西,限定了类有哪些成员变量,这些成员变量只是声明,没有分配空间,⽤类实例化出对象时,才会分配空间。

• ⼀个类可以实例化出多个对象,实例化出的对象 占⽤实际的物理空间,存储类成员变量。类就像是设计图,设计图规划了有多少个房间,房间⼤⼩功能等,但是并没有实体的建筑存在,也不能住⼈,⽤设计图修建出房⼦,房⼦才能住⼈。类就像设计图⼀样,不能存储数据,实例化出的对象分配物理内存存储数据。

实例化一般有两种方式,第一个是用类作类型,直接创建,此时用" . "来访问,第二个则是创建类指针,然后通过“ -> ”来访问,这两种都可以,我们习惯上用第一种,但一些考试种喜欢用第二种。

eg:

int main()
{Date d1;Date* d2;d1.Prin();d2->Prin();return 0;
}

2.2 对象⼤⼩

类实例化出的每个对象,都有独⽴的数据空间,所以对象中肯定包含成员变量,那么成员函数是否包含呢?⾸先函数被编译后是⼀段指令,对象中没办法存储,这些指令存储在⼀个单独的区域(代码段),那么对象中⾮要存储的话,只能是成员函数的指针。再分析⼀下,对象中是否有存储指针的必要呢,Date实例化d1和d2两个对象,d1和d2都有各⾃独⽴的成员变量_year/_month/_day存储各⾃的数据,但是d1和d2的成员函数Init/Print指针却是⼀样的,存储在对象中就浪费了。如果⽤Date实例化100个对象,那么成员函数指针就重复存储100次,太浪费了。其实函数指针是不需要存储的,函数指针是⼀个地址,调⽤函数被编译成汇编指令[call 地址], 其实编译器在编译链接时,就要找到函数的地址,不是在运⾏时找,只有动态多态是在运⾏时找,就需要存储函数地址。

9601afc719b944aca68d2cb8a579962d.png

对象的大小和C语言中的结构体规则差不多,遵循内存对齐。

采用内存对齐是因为操作系统采集数据时是按照一定的字节数采集的,如果不内存对齐有可能产生数据混杂,又需要分离数据,增加时间成本。故内存对齐本质上是拿空间换时间的做法

eg:

48a81c585ac84c388626cda40b0bba65.png

像这个,假如一次只能拿4个字节的话,就会导致int中有3个字节和char混杂了。

内存对⻬规则

• 第⼀个成员在与结构体偏移量为0的地址处。

• 其他成员变量要对⻬到某个数字(对⻬数)的整数倍的地址处。

• 注意:对⻬数 = 编译器默认的⼀个对⻬数 与 该成员⼤⼩的较⼩值。

• VS中默认的对⻬数为8

• 结构体总⼤⼩为:最⼤对⻬数(所有变量类型最⼤者与默认对⻬参数取最⼩)的整数倍。

• 如果嵌套了结构体的情况,嵌套的结构体对⻬到⾃⼰的最⼤对⻬数的整数倍处,结构体的整体⼤⼩就是所有最⼤对⻬数(含嵌套结构体的对⻬数)的整数倍

eg:

#include<iostream>
using namespace std;
// 计算⼀下A/B/C实例化的对象是多⼤?
class A
{public :void Print(){cout << _ch << endl;}
private:char _ch;int _i;
};
class B
{public :void Print(){//...}
};
class C
{};
int main()
{A a;B b;C c;cout << sizeof(a) << endl;cout << sizeof(b) << endl;cout << sizeof(c) << endl;return 0;
}

30eab25b169f4c0dabc6a25cce64d020.png

class A:char对齐数为VS对齐数8和本身大小1中的较小值1,即_ch只能从插入在对齐数倍数的行数开始插入,同理int对齐数为vs对齐数8和本身大小4中的较小值4,即_i只能从插入在对齐数倍数的行数开始插入例如,0 4 8 12... 将各变量顺序插入如上图所示,故A对象大小为8字节。

特别的当没有成员变量时,所以这⾥给1字节表⽰对象存在过,纯粹是为了占位标识对象存在,故BC对象大小都是1。

609307c6a67e4bb0be0723f4351d9f64.png

3. this指针

• Date类中有 Init 与 Print 两个成员函数,函数体中没有关于不同对象的区分,那当d1调⽤Init和Print函数时,该函数是如何知道应该访问的是d1对象还是d2对象呢?那么这⾥就要看到C++给了⼀个隐含的this指针解决这⾥的问题

• 编译器编译后,类的成员函数默认都会在形参第⼀个位置,增加⼀个当前类类型的指针,叫做this指针。⽐如Date类的Init的真实原型为,

void Init(Date* const this, int x,int y, int z)

• 类的成员函数中访问成员变量,本质都是通过this指针访问的,如Init函数中给_year赋值,

e517906ca961487981c16e8d572fd638.png

• C++规定不能在实参和形参的位置显⽰的写this指针(编译时编译器会处理),但是可以在函数体内显⽰使⽤this指针。

this指针有什么作用呢,我们在下一篇中讲解。

4.日期类再完善

下面是通过本文章内容对日期类小应用。

#include <iostream>
using namespace std;
class Date
{
public://行为void Prin() {cout << _year <<' ' << _month <<' ' << _day << endl;}void Inin(int x, int y, int z){this->_day = z;this->_year = x;this->_month = y;}
private://成员int _day;int _year;int _month;
};
int main()
{Date d1;d1.Inin(2023, 11, 1);d1.Prin();return 0;
}

实例化对象调用方法

8c581654a80d4665875df40cdb45f4ea.png

http://www.yayakq.cn/news/950437/

相关文章:

  • 有机玻璃制品 东莞网站建设网络推广工作好干吗
  • 网站建设设计流程步骤动易的网站能否静态
  • 做网站的详细流程官方网站套餐
  • 迎访问中国建设银行网站_wordpress中文固定连接
  • 北京网站的优化雅安市住房和城乡建设局网站
  • 网站开发移动端网站如何实现网站开发
  • 做公司网站有什么猫腻濮阳新闻综合频道网站
  • 建站行业突破网站的风格包含的因素
  • 沈阳高端网站定制wordpress文章图片粘贴固定大小
  • 建德市建设局网站什么是信息流广告
  • 贵州建设项目门户网站网站产品图怎么做
  • 产品结构设计网站制作相册模板免费的
  • 肥城做网站tahmwlkj网站建设的背景意义
  • 动力论坛源码网站后台地址是什么道滘镇做网站
  • 网站建设xyhlrj十大外贸平台
  • 汕头市研发网站建设网页升级紧急通知页面
  • 长春手机网站建站wangye
  • 资阳网站推广云教育科技网站建设
  • 昆明网站seo多少钱聊城大型门户网站建设
  • 网站建设 阿里榆中建设投资有限公司网站
  • 天津企业网站建设一般多少钱响应式网站建设看什么书
  • 建设平台型网站多少钱网站改成响应式
  • 网站找人做备案的价格天津 论坛网站制作公司
  • 专业微信网站建设公司首选公司哪家好wordpress 图片 存储
  • 淘宝做女鞋在哪个网站找货群晖做网站服务器 套件
  • 大良营销网站建设讯息千岛湖建设集团办公网站
  • 海外代理服务器 免费海洋seo
  • 网站建设的安全技术科技有限公司官网
  • 精密电子东莞网站建设技术支持公司和公司网站的关系
  • 网站源码下载了属于侵权吗现在什么语言做网站最好