C++(二十五) — 类的封装、实现、设计

1、类的封装、实现、对象的定义及使用

(1)类是一组对象的抽象化模型。类对象将数据及函数操作集合在一个实体中,只需要接口,而不需要知道具体的操作。

  • 隐藏细节,模型化;
  • 类内自由修改;
  • 减少耦合,相当于一个轮子;

(2)类的实现

  类的函数,原型声明要在类的主体中,而函数的具体实现一般卸载类声明之外。如果在类声明时定义成员函数,都是内联函数。

  还有,类内定义成员函数,类外实现时,如果需要设置默认参数,则要写在函数原型声明中,函数实现时不写默认值。

(3)对象的定义和使用

  类的成员是抽象,对象的成员才是具体。一个对象所占的内存空间是类的数据成员所占空间的总和。类的成员函数存在代码区,不占用内存空间。

 2、类的设计和测试

    设计一个数组类及相关的函数。

MyArray.h函数:

#pragma once
#include <iostream>
using namespace std;

class Array
{
public:
    Array(int length);
    Array(const Array& obj);
    ~Array();

    void setData(int index, int val);
    int getData(int index);
    int length();
private:
    int m_length;
    int *m_space;

};

 

MyArray.cpp函数:

#include "MyArray.h"

Array::Array(int length)
{
    if (length < 0)
    {
        length = 0;
    }
    m_length = length;
    m_space = new int[m_length];
}
Array::Array(const Array& obj)//复制构造函数
{
    this->m_length = obj.m_length;
    this->m_space = new int[this->m_length];

    for (int i = 0; i < m_length; i++)
    {
        this->m_space[i] = obj.m_space[i];
    }
}

Array::~Array()
{
    if (m_space != nullptr)
    {
        delete[] m_space;
        m_length = 0;
    }
}

void Array::setData(int index, int val)
{
    m_space[index] = val;
}
int Array::getData(int index)
{
    return m_space[index];
}
int Array::length()
{
    return m_length;
}

 

test.cpp函数:

#include <iostream>
using namespace std;
#include "MyArray.h"


void main()
{
    Array a1(10);
    for (int i = 0; i < a1.length(); i++)
    {
        a1.setData(i, i);
    }
    for (int i = 0; i < a1.length(); i++)
    {
        cout << a1.getData(i) << "  ";
    }

    Array a2 = a1;
    cout << "打印a2" << endl;
    for (int i = 0; i < a2.length(); i++)
    {
        cout << a2.getData(i) << "  ";
    }
    system("pause");
}

 

posted @ 2018-12-27 17:58  深度机器学习  阅读(828)  评论(0编辑  收藏  举报