zoukankan      html  css  js  c++  java
  • 十六、类的真正形态

    1、类的关键字

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

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

    • cass和 struct的用法是完全相同的

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

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

    #include <stdio.h>
    
    struct A
    {
        // defualt to public
        int i;
        // defualt to public
        int getI()
        {
            return i;
        }
    };
    
    class B
    {
        // defualt to private
        int i;
        // defualt to private
        int getI()
        {
            return i;
        }
    };
    
    int main()
    {
        A a;
        B b;
        
        a.i = 4;
        
        printf("a.getI() = %d
    ", a.getI());
        
        b.i = 4;
        
        printf("b.getI() = %d
    ", b.getI());
        
        return 0;
    }
    
    

    2、小实例

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

    • 提供 setoperator函数设置运算类型
    • 提供 setParameter函数设置运算参数
    • 提供 result函数进行运算
      • 其返回值表示运算的合法性
      • 通过引用参数返回结果
    // Operator.h
    #ifndef _OPERATOR_H_
    #define _OPERATOR_H_
    
    class Operator
    {
    private:
        char mOp;
        double mP1;
        double mP2;
        
    public:
        bool setOperator(char op);
        void setParameter(double p1, double p2);
        bool result(double& r);
    };
    
    #endif
    
    //Operator.c 
    #include "Operator.h"
    bool Operator::setOperator(char op)
    {
        bool ret = false;
            
        if( (op == '+') || (op == '-') || (op == '*') || (op == '/') )
        {
            ret = true;
            mOp = op;
        }
        else
        {
            mOp = '';
        }
            
        return ret;
    }
    
    void Operator::setParameter(double p1, double p2)
    {
        mP1 = p1;
        mP2 = p2;
    }
        
    bool Operator::result(double& r)
    {
        bool ret = true;
            
        switch( mOp )
        {
            case '/':
                if( (-0.000000001 < mP2) && (mP2 < 0.000000001) )
                {
                    ret = false;
                }
                else
                {
                    r = mP1 / mP2;
                }
                break;
            case '+':
                r = mP1 + mP2;
                break;
            case '*':
                r = mP1 * mP2;
                break;
            case '-':
                r = mP1 - mP2;
                break;
            default:
                ret = false;
                break;
        }
            
        return ret;
    }
    
    

    3、类的真正形态

    • C++中的类支持声明和实现的分离
    • 将类的实现和定义分开
      • .h头文件中只有类的声明
        • 成员变量和成员函数的声明
      • .cpp源文件中完成类的其它实现
        • 成员函数的具体实现

    4、小结

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

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

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

    • 在头文件中声明类
    • 在源文件中实现类
  • 相关阅读:
    Sublime Text 命令大全(积累所得)
    端口号
    帝之意志 看透世间
    Session and Cookie的基础用法
    厌胜术
    微信支付
    微信登录
    navicat常用快捷键与SQL基本使用
    idea Spring项目一直报错,但是点击进去就恢复正常了,解决办法,通过mvn idea:module命令生成iml文件
    解决报错WARNING: IPv4 forwarding is disabled. Networking will not work.
  • 原文地址:https://www.cnblogs.com/chenke1731/p/9626503.html
Copyright © 2011-2022 走看看