跳至主要內容

类和对象

张威大约 4 分钟c/c++类和对象

类和对象

img
img

什么是OOP思想?

面向对象的程序设计语言必须有描述对象及其相互之间关系的语言成分。这些程序设计语言可以归纳为以下几类:系统中一切事物皆为对象;对象是属性及其操作的封装体;对象可按其性质划分为类,对象成为类的实例;实例关系和继承关系是对象之间的静态关系;消息传递是对象之间动态联系的唯一形式,也是计算的唯一形式;方法是消息的序列。

oop编程方法:

  1. 先确定有哪些实体,根据实体的属性和行为抽象出 ADT(abstract data type)
  2. 类(属性->成员变量,行为->成员方法)实例化得到对象

面向对象基本概念

c语言:各种各样的函数定义

c++: 类,表示实体的抽象数据类型

在这里插入图片描述
在这里插入图片描述

oop语言的四大特征是什么?

  1. 抽象:忽略一个主题中与当前目标无关的东西,专注的注意与当前目标有关的方面,将其抽象。
  2. **封装/隐藏:只隐藏对象的属性和实现细节,仅对外提供公共访问方式。**通过访问限定符体现的出来的
    1. public
    2. private
    3. protected
  3. 继承:提高代码复用性;继承是多态的前提。
  4. 多态:是父类或接口定义的引用变量可以指向子类或具体实现类的实例对象。

C++中类的定义

C++用类来描述对象,类是对现实世界中相似事物的抽象,比如同是“双轮车”的摩托车和自行车,有共同点,也有许多不同点。“车”类是对摩托车、自行车、汽车等相同点的提取与抽象。

类的定义分为两个部分:数据(相当于属性)和对数据的操作(相当于行为)。

从程序设计的观点来说,类就是数据类型,是用户定义的数据类型,对象可以看成某个类的实例(某个类的变量)。所以说类是对象的封装,对象是类的实例

class 类名
{
public:
    //公有数据成员和成员函数
protected://面向对象用的少,继承用的多
    //保护数据成员和成员函数
private:
    //私有数据成员和成员函数
};  // 千万不要忘了这个分号

class内部可以拥有的是数据成员(属性)和成员函数(行为),他们可以分别用三个不同的关键字进行修饰,public、protected、private. 其中public进行修饰的成员表示的是该类可以提供的接口、功能、或者服务protected进行修饰的成员,其访问权限是开放给其子类private进行修饰的成员是不可以在类之外进行访问的,只能在类内部访问,可以说**就是由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(int argc, char * argv[])
{
    Computer pc;
    pc.setBrand("Huawei Matebook14");
    pc.setPrice(5600);
    return 0;
}

定义的成员函数,都是。除了可以在类内部实现外,成员函数还可以在类之外实现。类的外部定义成员函数时,应使用**作用域限定符(::)**来标识函数所属的类,即有如下形式:

返回类型 类名::成员函数名(参数列表)
{
    //....
}

对于Computer中的两个成员函数,我们在类之外实现,其实现如下:

void Computer::setBrand(const char * brand)
{   
    strcpy(_brand, brand);  
}
void Computer::setPrice(float price)
{   
    _price = price; 
}

注意:

如果类给外部的接口,返回的是成员属性的记得加const,

class Goods{
public:
    //char* getName();
    const char* getName;
private:
    char* _name;
};

class与struct的区别

在C++中,与C相比,struct的功能已经进行了扩展。class能做的事儿,struct一样能做,他们之间唯一的区别,就是默认访问权限不同。class的默认访问权限是private,struct的默认访问权限是public

struct Computer 
{
    //成员函数, 其访问权限是public
    void setBrand(const char *brand)
    {
        strcpy(_brand, brand);
    }
    void setPrice(float price)
    {
        _price = price;
    }
    
    //数据成员, 其访问权限是public
    char _brand[20];
    float _price;
};

class Computer2 
{
    //成员函数, 其访问权限是private
    void setBrand(const char *brand)
    {
        strcpy(_brand, brand);
    }
    
    void setPrice(float price)
    {
        _price = price;
    }
    
    //数据成员, 其访问权限是private
    char _brand[20];
    float _price;
};