C++类和对象之面向对象思想和类概述
目录:
面向过程和面向对象
例:三人去酒店住宿
类的产生
C++中类的定义
函数类内实现/类外实现
class与struct的区别
多文件编程
面向过程和面向对象
面向过程: 模块化,按照事物逻辑顺序进行
面向对象: 抽象,封装,继承,多态,具有相同属性的对象抽象为类
例: 三人去酒店住宿,并且交钱,找钱,因为老板有事,找的钱由店员代给,店员私吞一部分钱
从面向过程的角度:
1. 三人到酒店,房费250元,每人交100元
2. 老板准备好了找的50元,但是因为有事离开,把50元给店员,让店员给三人
3. 店员私心,私吞了20元,把剩下的30元分给3个人.
从面向对象的角度:
1. 分为五个对象:
2. 第一次交互:三兄弟各给老板100元
3. 第二次交互:老板给店员50元
3. 第三次交互:店员私吞20元,给三兄弟各10元
类的产生
客观现实世界有的都是 对象,万物皆对象,没有类。但大家都知道,在我们用Java、C++、C#等语言写代码时,都需要先定义一个类,之后再通过类创建对象。为什么呢?从认识论来说,首先有具体认知能力,而后才能有抽象认知能力,抽象认知能力是一种高层的,人类特有的认知能力,它使我们可以从大量具体认知中,舍弃个别的、非本质的属性,提取出共同的、本质的属性,是形成概念的必要手段。所以从哲学角度说,是先有对象,然后才有类,类和对象是“一般和特殊”这一哲学原理在程序世界中的具体体现。
类 可以帮助我们方便地认识和定义世界中的对象。这个作用是显而易见的。例如当今世界有76亿人,如果不会抽象思维,我们每遇到一个人,都要认知一遍:啊!这个对象有眼睛,有耳朵,有鼻子有嘴,有胳膊有腿……要是真这样,世界也太疯狂了。有了类的概念,我们就可以只记 类的数据和逻辑,而对于具体对象,只要知道它属于什么“类”,一切就都知道了,所需要区分的只是不同对象的数据具有不同值而已。
C++中类的定义
C++用 类 来描述对象,类是对现实世界中相似事物的抽象,比如同是“双轮车”的摩托车和自行车,有共同点,也有许多不同点。“车”类是对摩托车、自行车、汽车等相同点的提取与抽象。
类的定义分为两个部分:数据(相当于属性) 和 对数据的操作(相当于行为)。
从程序设计的观点来说,类 就是数据类型,是用户定义的数据类型,对象 可以看成某个类的实例(某个类的变量)。所以说类是对象的封装,对象是类的实例。
C++中用关键字 class 来定义一个类,其基本形式如下:
class Name // Name类名
{
public: // 公有 数据成员和成员函数
protected:// 保护 数据成员和成员函数
private:// 私有 数据成员和成员函数
}; // 不能少写分号
(类的定义(实现)就是成员函数的定义(实现),类的声明就是成员函数的声明)
(通过类创建对象,然后调用类的成员函数)
class 内部可以拥有的是数据成员(属性) 和 成员函数(行为),他们可以分别用三个不同的关键字进行修饰,public、protected、private
- public 进行修饰的成员表示的是该类可以提供的接口、功能、或者服务;
- protected 进行修饰的成员,其访问权限是开放给其子类;
- private 进行修饰的成员是不可以在类之外进行访问的,只能在类内部访问,可以说封装性就是由该关键字来体现。
举例:
class Computer
{
public: //成员函数void setBrand(const char * brand) {strcpy(_brand, brand);}void setPrice(float price){_price = price;} private://数据成员char _brand[20];float _price;
};int main()
{Computer pc;pc.setBrand("MacBook Pro");pc.setPrice(9999);return 0;
}
在类中定义的成员函数,都是 inline 函数。除了可以在类内部实现外,成员函数还可以在类之外实现。在类定义的外部定义成员函数时,应使用作用域限定符( :: )来标识函数所属的类,即有如下形式:
返回类型 类名::成员函数名(参数列表)
{//....
}
对于Computer中的两个成员函数,我们在类外实现,其实现如下:
void Computer::setBrand(const char * brand)
{strcpy(_brand, brand);
}void Computer::setPrice(float price)
{_price = price;
}
class与struct的区别
在 C++ 中,与 C 相比, struct 的功能已经进行了扩展。 class 能做的事儿,一样能做,他们之间唯一的区别,就是 默认访问权限不同。
- class 的默认访问权限是 private ,
- struct 的默认访问权限是 public
当设置了访问权限时,两者是相同的。
//默认访问权限是public
struct Computer { //成员函数void setBrand(const char * brand) {strcpy(_brand, brand);}void setPrice(float price){ _price = price;} //数据成员char _brand[20];float _price;
};//默认访问权限是private
class Computer2
{//成员函数void setBrand(const char * brand){strcpy(_brand, brand);}void setPrice(float price){ _price = price;} //数据成员char _brand[20];float _price;
};
多文件编程
头文件与实现文件分开,放在头文件和实现文件中进行编译
- 头文件:类,定义函数声明等
- 实现文件:函数实现等
- 测试文件:main函数等
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
