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++中的类支持声明和实现的分离

    • 在头文件中声明类
    • 在源文件中实现类
  • 相关阅读:
    Mybatis里Mapper.xml加强
    在eclipse中怎么把一个普通的项目变成一个maven项目
    给自己写博客定的小标准
    五一假期的惬意生活~
    MAC上postman离线安装时提示加载扩展程序出错怎么办?
    2017-4-6 四月生花,冷暖自知
    微信小程序开发过程中tabbar页面显示的相关问题及解决办法!
    微信小程序中如何实现分页下拉加载?(附源码)
    利用stylist插件,简单两步屏蔽新浪微博上的广告
    微信小程序官方指南手册,教你如何使用微信小程序!
  • 原文地址:https://www.cnblogs.com/chenke1731/p/9626503.html
Copyright © 2011-2022 走看看