第16课-类的真正形态

1. 问题

  • 经过不停的改进,结构体struct变得越来越不像它在C语言中的样子了

 

2. 类的关键字

  • struct在C语言中已经有了自己的定义,必须继续兼容

  • 在C++中提供了新的关键字class用于类定义

  • classstruct的用法是完全相同的

 

问题:classstruct有什么区别?

  • 在用struct定义类时,所有成员的默认访问级别public

  • 在用class定义类时,所有成员的默认访问级别private

struct A
{
    //  default to public
    int i;
    // default to public
    int getI()
    {
         return i; 
    }   
};

struct B
{
    //  default to private
    int i;
    // default to private
    int getI()
    {
         return i; 
    }   
};

 

3. 小实例

  • 需求:开发一个用于四则运算的类

    - 提供setOperator函数用于设置运算类型

    - 提供setParameter函数用于设置运算参数

    - 提供result函数进行运算

      (1) 其返回值表示运算的合法性

      (2) 通过引用参数返回结果

 

4. 类的真正形态

  • C++中的类支持声明实现分离

  • 将类的声明实现分开

    - .h头文件中只有类的声明

      成员变量成员函数的声明

    - .cpp源文件中完成类的其它实现

      成员函数的具体实现

#ifndef _OPERATOR_H
#define _OPERATOR_H

class Operator
{
private:
    char m_op;
    double m_p1;
    double m_p2;
    
public:
    void setOperator(char op);
    void setParametor(double p1, double p2);
    bool result(double& r);
};

#endif

#include "Operator.h"

void Operator::setOperator(char op)
{
    m_op = op;
}

void Operator::setParametor(double p1, double p2)
{
    m_p1 = p1;
    m_p2 = p2;
}

bool Operator::result(double& r)
{
    bool ret = true;
    
    switch( m_op )
    {
    case '+':
        r = m_p1 + m_p2;
        break;
    case '-':
        r = m_p1 - m_p2;
        break;
    case '*':
        r = m_p1 * m_p2;
        break;
    case '/':
        if( (-0.000000001 < m_p2) && (m_p2 < 0.000000001) )
        {
            ret = false;
        }
        else
        {
            r = m_p1 / m_p2;
        }
        break;
    default:
        ret = false;
        break;
    }
    
    return ret;
}

 

5. 小结

  • C++中引进了新的关键字class用于定义类

  • structclass区别在于默认访问级别的不同

  • C++中的类支持声明实现分离

    - 在头文件中声明类

    - 在源文件中实现类

本文出处:狄泰软件学院

posted @ 2020-04-05 17:58  WisdomMan  阅读(3)  评论(0)    收藏  举报