C++特性之封装性--《C++ primer》

本文深入探讨了面向对象编程中的封装原则,通过学生类实例展示了封装如何实现数据隐藏与功能整合,增强了软件的可维护性和可扩展性。详细解释了封装的两个含义,并提供了完整代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


封装性封装是面向对象方法的一个重要原则,是将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体。封装有两个含义:结合性,即将属性和方法结合(也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员);信息隐蔽性,利用接口机制隐蔽内部细节。因此封装的目的在于将对象的使用者和设计者分开,以提高软件的可维护性和可修改性。


例如,在抽象的基础上,我们可以将学生的数据和功能封装起来,构成一个学生类.如下:

class Student   
   {  
       private:               //私有成员,外部无法访问   
          int Num;
          string Name;           
          float Score;  
       public:               //公有成员,外部借口   
          void Create();            
          int Search(int n);   
          void Display();   
   }   

可以看到通过封装使一部分成员充当类与外部的接口,而将其他的成员隐蔽起来,这样就达到了对成员访问权限的合理控制,使不同类之间的相互影响减少到最低限度,进而增强数据的安全性和简化程序的编写工作。


各种角度看封装


用户:我只需要个能用的,能升级的产品.

客户程序员:我需要的是可扩展的,封装的,插件式的库,这个库的东西不能影响到程序框架中的其他部分.

库程序员:给客户程序员一个接口和一个二进制级别的代码。以实现可扩充行和可重用性.

内存:对我而言没有封装,计算机的一个基本概念,越往底层限制的东西越少.

编译器:我编译出来的代码要具有封装性,必须处理我和同行之间的差异.

C++语言:无辜的我是用来限制程序员的。但是也可以使用我的巧妙规则来提高你的水平,来实现你所需要的重用和扩充性.

下面是一个学生类的完整代码,希望借此理解C++的封装性其实就是通过类和对象以及其访问权限的设定实现的。

/*main.cpp*/
#include <iostream>
#include "action.h"
using namespace std;

int main(int argc,char *argv[]) 
{   
    Student stu[5];     
    cout <<"请输入学生学号, 成绩: "<< endl; 
    
    for(int i=0;i<5;i++) 
    {
        cout <<"第"<< i+1 <<"位同学: "; 
        stu[i].Create();    
    } 
    for(int i=0;i<5;i++) 
       stu[i].Display();  
         
    int n, flag=0; 
    cout <<"请输入要查找同学学号:"; 
    cin >> n; 
    for(int i=0;i<5;i++) 
    {
       if(stu[i].Search(n)==1)   
       {  
          stu[i].Display(); 
          flag=1; 
        break; 
       }
       else if(i==4) 
          cout<<"没有找到该学生!"<< endl; 
    }    
  return 0;
}

/*action.cpp*/
#include <iostream>
#include "action.h"
using namespace std;

void Student::Create() 
{   
    cin >> Name >> Num >> Score; 
}  

int  Student::Search(int n) 
{ 
    if(Num==n) 
        return 1;  
     else  
        return 0; 
}
 
void Student::Display()   
{  
   cout <<"姓名: "<< Name <<"学号: "<< Num <<"成绩: "<< Score << endl;
} 

/*action.h*/
#ifndef ACTION_H
#define ACTION_H

#include <iostream>
using namespace std;

class Student              
{    
  private:
     string Name;
     int Num;           
     float Score;       
  public: 
     void Create();         
     int Search(int n);   
     void Display();    
}; 

#endif



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值