类的真正形态

经过不停的改进,结构体struct变得越来越不像它在C语言中的样子,我们的意识中struct定义一个变量的集合,到了C++,现在的struct定义的是一个类,但是它可以定义自己的函数和访问权限,这在C里面是不允许的,C++顾名思义兼容C语言的一切然后发展属于自己的东西,然而struct在C++这改变了原有的含义,所以我们必须找出其他方法来替代struct,所以C++中提供了新的关键字class用于类定义,class和struct(尽量避免使用)的用法是完全相同的
class和struct的区别
在用struct定义类时,所有成员的默认访问级别为public
在用class定义类时,所有成员的默认访问级别为private
例子:
在这里插入图片描述
编译运行:

可以看出我们的class的默认级别时private,我们在类外部访问它会出错

C++中的类支持声明和实现的分离,将类的实现和定义分开
.h头文件中只有类的声明,类的声明表示用户需求
成员变量和成员函数的声明
.cpp源文件中完成类的其他实现
成员函数的具体实现

operation.h

#ifndef _OPERATION_H
#define _OPERATION_H
class operation
{
  private:
    char   Mop;
    double Mp1;
    double Mp2;
  public:
    bool setOpeartion(char mop);
    void setPatamter(double mp1,double mp2);
    bool  result(double &r); 
};
#endif

operation.c

#include "operation.h"
bool operation::setOpeartion(char mop)
{
  bool ret = false;
  if((mop=='+')||(mop=='-')||(mop=='*')||(mop=='/'))
  {
     ret = true;
     Mop = mop;
  }
  else
  {
    Mop = '\0';
  }
  return ret;
};
void operation::setPatamter(double mp1,double mp2)
{
  Mp1  = mp1;
  Mp2  = mp2;
}
bool operation::result(double &r)
{
    bool ret = true;
    switch(Mop)
   {
      case '/':
      if((-0.000000001<Mp1)&&(0.000000001>Mp2))
      {
          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;
}

test.c

#include <stdio.h>
#include "operation.h"

int main()
{
    operation op;
    double r = 0;
    
    op.setOpeartion('/');
    op.setPatamter(9, 3);
    
    if( op.result(r) )
    {
        printf("r = %lf\n", r);
    }
    else
    {
        printf("Calculate error!\n");
    }
    return 0;   
}

结果:
在这里插入图片描述
上面的代码采用了面向对象的方法,将类的声明和定义分开,计算一个四则运算,可见面向对象的方法让我们的代码更加容易扩展,移值,层次分明

发布了20 篇原创文章 · 获赞 1 · 访问量 361

猜你喜欢

转载自blog.csdn.net/qq_41936794/article/details/104519286