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 内部可以拥有的是数据成员(属性)成员函数(行为),他们可以分别用三个不同的关键字进行修饰,publicprotectedprivate

  • 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函数等


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部