美文网首页
C++总结(5)封装与继承

C++总结(5)封装与继承

作者: bluewind1230 | 来源:发表于2018-01-25 22:15 被阅读0次

封装

所有的 C++ 程序都有以下两个基本要素:
函数:这是程序中执行动作的部分,它们被称为函数或方法。
数据:数据是程序的信息,会受到程序函数的影响,也叫属性。

封装是面向对象编程中的把数据和操作数据的函数绑定在一起的一个概念,这样能避免受到外界的干扰和误用,从而确保了安全。

我们已经知道,类包含私有成员(private)、保护成员(protected)和公有成员(public)成员。默认情况下,所有的数据成员和函数成员都是私有的。
为了使类中的成员变成公有的(即程序中的类外部的其他部分也能访问),必须在这些成员前使用 public 关键字进行声明。所有定义在 public 标识符后边的属性或函数可以被程序中所有其他的函数访问。

例子:

#include <iostream>
using namespace std;
class Adder{
   public:
      // 构造函数
      Adder(int i = 0)
      {
        total = i;
      }
      // 对外的接口
      void addNum(int number)
      {
          total += number;
      }
      // 对外的接口
      int getTotal()
      {
          return total;
      };
   private:
      // 对外隐藏的数据
      int total;
};
int main( )
{
   Adder a;
   a.addNum(10);
   a.addNum(20);
   a.addNum(30);
   cout << "Total is " << a.getTotal() << endl;
   return 0;
}

运行结果:

Total is 60

上面的类把数字相加,并返回总和。公有成员 addNum 和 getTotal 是对外的接口,用户需要知道它们以便使用类。私有成员 total 是对外隐藏的(即被封装起来),用户不需要了解它,但它又是类能正常工作所必需的。

类的设计策略:
通常而言,要把类的数据成员设计成私有(private),类的函数成员则根据实际需要设计成publice, protected或private。

继承

#include <iostream>
using namespace std;
class Animal
{
protected:
    float weight;
public:
    void setWeight(float w) 
    {
        weight = w;
    }
    float getWeight()
    {
        return weight;
    }
    void breathe()
    {
        cout << "breathing..." << endl; 
    }   
};
class Dog : public Animal
{
private:
    int legs;
public:
    void setLegs(int number)
    {
        legs = number;  
    }
    int getLegs()
    {
        return legs;    
    }
    void bark()
    {
        cout << "wang! wang!" << endl;
    }   
};
int main(int argc, char** argv)
{
    Dog dog;
    dog.setWeight(12.5);
    dog.setLegs(4);
    cout << "The dog's weight is " << dog.getWeight() << "kg" << endl;
    cout << "The dog has " << dog.getLegs() << " legs" << endl; 
    dog.breathe();
    dog.bark();
    return 0;
}
运行结果:

The dog’s weight is 12.5kg
The dog has 4 legs
breathing...
wang! wang!

程序分析:
(1)Animal为一个类,Dog为另一个类。
class Dog : public Animal 表示Dog类继承了 Animal类。此时,Animal就成了Dog的基类或父类。Dog就成了Animal的派生类或子类。

(2)体重和呼吸是所有动物的共性,所以weight和breathe()定义在类Animal中。腿和吠不是所有动物的共性,所以legs和bark()定义在了类Dog中。

(3)class Dog : public Animal , 这里的public表示继承方式 。
继承方式有三种:public, protected和private。
① 父类为private的属性和方法,不能被子类继承。
② 父类为protected的成员,若被子类public继承的,仍为子类的protected成员;若被子类protected或private继承的,变为子类的private成员。
③ 父类为public的成员,若被子类public继承的,仍为子类的public成员;若被子类protected继承的,变为子类的protected成员;若被子类private继承的,变为子类的private成员。

(4)根据(3)中第③条的结论,若程序改为class Dog : protected Animal,则程序无法通过编译。因为setWeight()和getWeight()被protected继承后,变为Dog的protected成员,而protected成员,无法在类外部(比如main函数中)访问。

相关文章

  • C++总结(5)封装与继承

    封装 所有的 C++ 程序都有以下两个基本要素:函数:这是程序中执行动作的部分,它们被称为函数或方法。数据:数据是...

  • C++学习笔记(3)

    摘要:本篇对C++的三个重点「封装,继承,多态」的学习总结与使用。 很遗憾,在坚持了一段时间c++的学习后,有点想...

  • 8-C++远征之继承篇-学习笔记

    C++远征之继承篇 开篇介绍 整个C++远征计划: 起航->离港->封装->继承 为什么要用继承? 为什么要有继承...

  • C++的多态

    C++三大特性:封装、继承和多态。其中最好理解的就是封装了,继承作为C++面向对象的特征也不难理解,那么多态,应该...

  • 慕课网-C++远征之继承篇(上)-学习笔记

    C++远征之继承篇 开篇介绍 起航->离港->封装->继承 为什么要用继承? 为什么要有继承? 基类 <---->...

  • 2020-07-06----《C++类的学习》

    函数重载:同名不同参。 C++类的特点:封装、继承、多态。 //多态与函数重载是啥关系? 虚函数:和软件架构相关 ...

  • 条款34:区分接口继承和实现继承

    区分接口继承和实现继承 c++的(公有)继承主要有两个意图:实现继承和接口继承。实现继承其实体现了面向对象封装的特...

  • C++ 封装 继承 多态

    一、封装:将具体的事情封装成抽象的类 二、继承:实现泛化聚合功能 1、泛化 :实现继承,可视继承 2、聚合:接口继...

  • 09.类

    面向对象语言的重头戏———类 我们知道C++是一门面向对象的语言,与面向过程的语言C不同的是C++的封装,继承和多...

  • 关于虚继承的一些问题(转)

    关于C++中的虚拟继承的一些总结 C++类的大小 1.为什么要引入虚拟继承 虚拟继承是多重继承中特有的概念。虚拟基...

网友评论

      本文标题:C++总结(5)封装与继承

      本文链接:https://www.haomeiwen.com/subject/qcvbaxtx.html