C++对象和类概述
创始人
2024-01-22 01:42:32

11 对象和类

11.1 过程式和面向对象编程

面向过程编程:先考虑函数,然后再细化到数据

面向对象编程:对象(数据+函数)

11.2 抽象和类

在计算中,抽象是根据与用户的接口来表示信息的关键步骤。

11.2.1 什么是类型?

总之,只当基本类型完成了三项工作

  • 1.决定数据对象需要的内存数量
  • 2.决定如何解释内存中的位(long和float在内存中占用的位数相同,但将它们转换位数值的方法不同)
  • 3.决定可使用数据对象执行的操作或方法

11.2.2 C++中的类

类是一种将抽象转换为用户定义类型的C++工具,它将数据表示和操纵数据的方法组合成一个整洁的包。

自定义类的思路:以股票为例

1.首先要思考要将什么作为一个基本单位:你可以把一个人目前持有的某只股票作为一个基本单位

2.需要哪些功能(方法)

1. 获得股票
2. 增持
3. 卖出股票
4. 更新股票价格
5. 显式关于所持股票的信息

3.需要存储哪些信息

1. 公司名称
2. 所持股票的数量
3. 每股的价格
4. 股票总值

4.定义类

  • 1.类声明:以数据成员的方式描述数据部分,以成员函数(方法)的方式描述共有接口。
  • 2.类方法定义:描述如何实现类成员函数

什么是接口?

接口是一个共享框架,供两个系统交互时使用。—如在计算机和打印机之间或者用户或计算机程序之间。

接口的含义:让程序员能够编写与类对象交互的代码,从而让程序能够使用类对象。

img

11.2.3 访问控制

使用类对象的程序都可以直接访问公有部分,但只能通过公有成员函数来访问对象的私有成员。因此公有成员函数是程序和对象的私有成员之间的桥梁,提供了对象和程序之间的接口。

数据隐藏:程序无法访问对象的私有成员。它保证了数据的完整性。(不仅不允许程序员直接访问数据,而且确定了函数的接口,然后当你发现更好的方式实现函数时,你可以直接更改函数具体的实现而无需更改接口,这提高了程序的可维护性)

封装:数据隐藏(将数据放入类的私有成员),在私有部分中隐藏实现的函数细节,将类函数定义放在与类声明分开的文件中。

11.2.4 成员访问控制 Public or Private?

不必在类声明中使用关键字private,因为这是类对象的默认访问控制。

class World
{float mass; // private by defaultchar name[20]; // private by defaultpublic:void tellall(void);...
};

类和结构体的区别?

唯一的区别是结构体的默认访问类型是public,而类的默认类型是private。c++程序员通常使用类来实现类描述,同时将结构体限制为表示纯数据对象(通常称为普通的老式数据结构,或POD结构)。

11.2.5 实现类成员函数

类成员函数与普通函数的区别:

  • 1.定义类成员函数时,使用作用域解析运算符(::)来标识函数所属的类;
  • 2.类方法可以访问类的private组件

类作用域:

//这两个类成员函数相互不干扰
void Stock::update(double price);
void Buffoon::update()

一个类成员函数可以直接使用同类下的其他成员函数而无需::符号(在类定义或成员函数定义中都可),但是其他地方必须使用class::符号,eg:Stock::update()。

11.2.6 内联方法

定义位于类声明中的函数都将自动成为内联函数。

下面这两种定义是等价的:

class Stock // class declaration
{
private:...void set_tot() { total_val = shares * share_val; }//是个内联函数
public:...
}; // note semicolon at the end
#endifclass Stock
{
private:...void set_tot(); // definition kept separate
public:...
};
inline void Stock::set_tot() // use inline in definition
{total_val = shares * share_val;
}

11.2.7 方法使用哪个对象?

调用成员函数时,它将使用被用来调用它的对象的数据成员。

下面这两个函数调用使用的是各自的shares and share_val:

Stock kate, joe;
kate.show(); // the kate object calls the member function
joe.show(); // the joe object calls the member function

所创建的每个新对象都有自己的存储空间,用于存储其内部变量和类成员;但同一个类的所有对象共享同一组类方法,及每种方法只有一个副本。

在OOP中,调用成员函数被称为发送消息,因此将同样的消息发送给两个不同的对象将调用同一个方法,但该方法被用于两个不同的对象。见下图。

img

11.2.8 使用类

C++的目标是使得使用类与使用基本的内置类型(如int和char)尽可能相同。

基本上基本类型能做的自定义的类也能做。

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
ps局部放大 放大某个部位的图... 软件类学习建议:边看边练习,可以先收藏后学习。一、使用Ctrl快捷键放大:Ctrl + +缩小:Ct...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
ps局部放大 放大某个部位的图... 软件类学习建议:边看边练习,可以先收藏后学习。一、使用Ctrl快捷键放大:Ctrl + +缩小:Ct...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...