前边我们所定义的类,均是使用struct关键字来定义,但是C++中真正用于定义类的关键字为class,因为要C++兼容C,所以保留struct关键字,struct与class的用法完全相同
一、类的关键字
- struct 在 C 语言中已经有了自己的含义,必须继续兼容
- 在C++ 中提供了新的关键字 class 用于类定义
- class 和 struct 的用法是完全相同的
- 在用 struct 定义类时,所有成员的默认访问级别为 public
- 在用 class 定义类时,所有成员的默认访问级别为 private
如下:

下面看一段使用 class 的代码:
#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\n", a.getI());
    
    b.i = 4;
    
    printf("b.getI() = %d\n", b.getI());
    
    return 0;
}下面为输出结果,运行报错,指出 class 声明的类,所有成员的默认访问级别为 private

在 class B 里面加个 public 即可,如下:
class B
{
public:
    // defualt to private
    int i;
    // defualt to private
    int getI()
    {
        return i;
    }
};下面为输出结果:

二、类的真正形态
C++ 中的类支持声明和实现的分离
将类的实现和定义分开
- .h头文件中只有类的声明
- 成员变量和成员函数的声明
- .cpp源文件中完成类的其它实现
- 成员函数的具体实现
三、小实例
需求:开发一个用于四则运算的类
提供 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);
};
#endifOperator.cpp
#include "Operator.h"
bool Operator::setOperator(char op)
{
    bool ret = false;
    if( (op == '+') || (op == '-') || (op == '*') || (op == '/') )
 
    {
        ret = true;
 
        mOp = op;
    }
    else
    {
        mOp = '\0';
 
    }
    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;
}test.cpp
#include <stdio.h>
#include "Operator.h"
 
int main()
{
    Operator op;
    double r = 0;
    
    op.setOperator('/');
    op.setParameter(9, 3);
    
    if( op.result(r) )
    {
        printf("r = %lf\n", r);
    }
    else
    {
        printf("Calculate error!\n");
    }
    
    return 0;
}下面为输出结果:

四、小结
C++ 引进了新的关键字 class 用于定义类
struct 和 class 的区别在于默认访问级别的不同
C++ 中的类支持声明和实现的分离
- 在头文件中声明类
- 在源文件中实现类
到此这篇关于C++深入探索类真正的形态是的文章就介绍到这了,更多相关C++类的形态内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
				 沃梦达教程
				
			本文标题为:C++深入探索类真正的形态之struct与class
 
				
         
 
            
        基础教程推荐
             猜你喜欢
        
	     - C语言文件操作与相关函数介绍 2023-06-13
- C语言预编译#define(预处理) 2023-04-03
- C++类和对象到底是什么 2022-11-12
- 漫画讲解C语言中最近公共祖先的三种类型 2023-01-01
- 使用C/C++读写.mat文件的方法详解 2023-03-05
- C++高级数据结构之并查集 2023-04-20
- 如何告诉 MinGW 链接器不要导出所有符号? 2022-10-07
- C语言实现简易停车场管理系统 2023-03-13
- 使用VS2022开发在线远程编译部署的C++程序(图文详解) 2023-01-15
- C/C++ Qt StatusBar底部状态栏应用教程 2023-01-10
 
    	 
    	 
    	 
    	 
    	 
    	 
    	 
    	 
						 
						 
						 
						 
						 
				 
				 
				 
				