栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++第八章 类与对象(基本概念)!!!不要再摆了

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++第八章 类与对象(基本概念)!!!不要再摆了

抽象的概念

 

抽象是相对的不是绝对的

时钟的类 数据抽象 行为抽象

 8.1-3访问控制

 

 

 

 

 8.1.4-1类的实现与使用

 类内部实现类

 类外实现

 

 

类外实现 

使用时钟类 

 例子如下

 都输出10 所以会改变 

 注意! 

 

两种都错误 因为他俩都是私有属性 ,只要是私有属性 数据成员和函数成员都不能在类的外面 看到或访问 只有在类的函数里面 才能内部访问

 

 

 8.1.4-2类的实现与引用例子 例子:简单int数组类

  在类public中添加函数 setArray 否则data没有初始化分配空间

 

 

 getval取极值由参数condition=1or0决定

 

 

  8.1.5指针

 this指向对应的类对象的首地址 

this指针举例

void setValue(int value) 此函数作用是用形参value设置setvalue初始化成员value 但是由于形参value同名的形参覆盖了成员数据value 形参value自己赋值给自己 所以成员数据value并没有修改为了用形参改变类对象的value  用this->value

②用不会覆盖value的形参v改变value的值也可以

 this指针不能显示声明,它只是非静态成员函数的一个形参 右边是编译器的处理 把隐式this翻译

 在main中 编译器把类对象的首地址作为参数调用 就像上图的右边

 8.2初始化与结束处理 8.2-1构造函数 自动初始化

 

 Counter counter2=9 这种方式只能对付 函数定义 只要求一个参数 的情况

Clock clock2();是错误初始化 因为定义要求 三个参数

 

上图这个类不能再有一个没有任何参数的构造函数(Clock() )了 

因为第一个(int h=0....)他可以接受不带参数的构造函数 所以不能再定义否则会出现混淆重复

 

 编译器自动生成的构造函数不做任何事 函数体是空的 

 8.2.2析构函数

 

 两次输出对应Clock obj1 obj2

 为了释放obj 加析构函数

 

 8.2.3拷贝构造函数  用已经存在的构造函数初始化命名的构造函数

 Point obj2(obj1)   Point obj3=obj2 是一样的 调用拷贝构造函数

 编译器自动产生的缺省拷贝构造函数

 

 修改方案:让obj1obj2两个类对象的buf指针各自指向各自,都指向独立空间 释放的时候释放的是自己所指向的空间 就能解决这个问题

buf=new char[len] 指针new 然后strcpy buf  实现 准确复制数据

 

 三次拷贝构造函数

 8.3指针,参数,静态,常,友元与组合等概念 8.3.1类类型作为函数参数

   对象本身做参数 效率低 多次引用拷贝构造函数

 对象引用 效率很高 直接用对象

 对象指针 做参数 直接访问修改实参 但func3空间的分配和释放 效率不如上图

 8.3.2对象数组  (一个类 存储多个类对象的数据)

 

 

 这三行初始化分别对应array【3】数组里面的三个数据(point(3,4));(5);()

 p++自动访问下一个类对象元素 方便快捷

8.3.3静态成员

 内部声明;类的外部定义并初始化

  静态数据成员的特性(属于类,不属于类对象):无论调用多少次 静态数据成员在类的所有对象都共享同一片存储空间  例子:int s_value 是所有类对象共享的同一片空间

 静态数据成员  属于类,不属于类对象

 一个类对象修改了静态数据成员 所有的类对象访问的都是修改后的

静态成员函数的定义  在函数前加static

 能将构造函数声明为非public属性   应用举例: 保证只有一个类的实例

没有实例的时候 instance=NULL     

 ① 根据类对象是否合格 进行统计;设定类有一个整形计数器,类对象合格计数器加一,不合格不加;

②和③ 属于“类”问题 定义两个静态数据成员 分别计算工厂自生产以来 不合格产品数量 ,以及生产的时钟数量

①和对象相关定义为 普通成员;②③和类相关,和对象没有直接关系 定义为静态成员

8.3.4常对象与常成员(const)

 shoutime()是非常成员函数

 3.常成员函数:这个成员函数 

不能通过常成员函数 更新对象的数据成员 也不能调用 没有被const的成员是不能被调用的

定义的时候有const 实现的时候也要有

8.3.5友元

 

 解决方案3:像第一种方案一个普通的成员函数实现两点距离&同时方便的访问到私有成员 

关键字 friend 声明朋友后 Distence这个函数就可以访问所有Point类对象的私有共有成员 所有成员

 

 Y的类对象都可以访问x的所有成员

   Y的成员函数可以使用X X&obj

因为X只声明了Y::SetX 函数是X的友元  所以这个函数可以随便访问X类对象的私有数据 

8.3.6组合类    类的组合

Point圆心 是circle园这个类的部分  所以把point作为circle的子类 实数radius 半径作为数据成员

注意如果子类的构造函数没有不带缺省参数的;

就要用初始化列表的方式初始化子类对象 : circle(floatx,float y,float z):center(x,y)就是

调用的时候就先初始化子类对象,再调用组合类构造函数 先把各个部分完成 在组装成完整对象 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/989629.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号