码迷,mamicode.com
首页 > 编程语言 > 详细

嵌入式linux C++语言(三)——封装(Encapsulation)

时间:2016-08-15 14:45:35      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:嵌入式 linux c++ 封装

嵌入式linux C++语言(三)——封装(Encapsulation

一、封装简介

    C语言等面向过程编程中,数据以及数据的相关操作函数都是分离的独立个体;在C++等面向对象编程中,数据以及数据的相关操作被设计为对象,对象包括属性(数据)和操作(函数),两者共同构成对象实体(即类实体)。面向对象编程使程序更模块化,更易读易写,提升了代码重用到一个更高的层次。

    面向对象编程中,数据和数据的操作封装为了对象。封装可以隐藏实现细节,使得代码模块化,是把过程和数据包围起来,对数据的访问只能通过已定义的接口。

    封装是一种对外提供服务的模型,封装模型是对世间万物的个体抽象。

    封装的访问属性如下:

访问属性     属性     对象内部     对象外部
public        公有     可访问       可访问
protected     保护     可访问       不可访问
private       私有     可访问       不可访问

    C语言中,struct中所有行为和属性都是public(默认),既可以使用接口,又可以直接访问其内部数据,没有屏蔽内部数据C++中的class可以指定行为和属性的访问方式对内开放数据,对外屏蔽数据,对外提供接口。

二、C语言的封装

stackC语言实现:

#include <stdio.h>
#include <string.h>
 
typedef struct stack
{
    char space[1024];
    int top;
}stack;
 
void stack_init(stack *st)
{
    st->top = 0;
    memset(&st->space, 0, sizeof(st->space));
}
 
int is_empty(stack *st)
{
    return st->top == 0;
}
int is_full(stack *st)
{
    return st->top == 1024;
}
 
char pop(stack *st)
{
    return st->space[--st->top];
}
 
void push(stack *st, char c)
{
    st->space[st->top++] = c;
}
 
int main(void)
{
    stack st;
    stack_init(&st);
    unsigned int i;
    for(i = ‘a‘; i < (‘z‘ + 1); i++)
    {
        if(!is_full(&st))
            push(&st, i);
    }
    for(i = ‘a‘; i < (‘z‘ + 1); i++)
    {
        printf("%c\n", pop(&st));
    }
    return 0;
}

C语言中封装的struct的数据成员是可以被外部调用修改的。

三、C++类的封装

C++类实现stack

stack.h源码:

#ifndef STACK_H
#define STACK_H
 
class stack
{
public:
    stack();
    bool is_empty();
    bool is_full();
    void push(char c);
    char pop();
private:
    char space[1024];
    unsigned int top;
};
 
#endif // STACK_H

 

stack.cpp源码:

#include "stack.h"
#include <string.h>
 
stack::stack()
{
top = 0;
    memset(space, 0, sizeof(space));
}
 
bool stack::is_empty()
{
    return top == 0;
}
 
bool stack::is_full()
{
    return top == 1024;
}
 
void stack::push(char c)
{
    space[top++] = c;
}
 
char stack::pop()
{
    return space[--top];
}

 

main.cpp源码:

#include <iostream>
#include "stack.h"
#include <string.h>
using namespace std;
 
int main()
{
    stack st;
    unsigned int i;
    for(i = ‘a‘; i < ‘z‘ + 1; i++)
    {
        if(!st.is_full())
            st.push(i);
    }
    for(i = ‘a‘; i < ‘z‘ + 1; i++)
    {
        cout<<st.pop()<<endl;
    }
    return 0;
}

    C++语言中封装的class stack中数据成员是private的,对于外部不可访问,通过设置数据成员和操作方法的访问权限,可以对外部开放、屏蔽数据成员和操作方法。


本文出自 “生命不息,奋斗不止” 博客,转载请与作者联系!

嵌入式linux C++语言(三)——封装(Encapsulation)

标签:嵌入式 linux c++ 封装

原文地址:http://9291927.blog.51cto.com/9281927/1837984

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!