------/类的封装
使用类时,不需关心其实现细节,创建类时,才需考虑其内部实现细节
类成员作用域只在类内部,外部无法直接访问
成员函数可以直接访问成员变量和调用其它成员函数
类外部可通过类变量访问public成员
类成员作用域与访问级别没有关系
struct定义的类所有成员默认为public
int i = 1;
struct Test
{
private:
int i; //覆盖全局i
public:
int getI()
{
i = 3;
return i;
}
};
int main()
{
int i = 2;
printf("i = %d\n", i); //2
printf("::i = %d\n", ::i); //1 ::作用域分辨符 默认命名空间中的i
Test test;
printf("test.getI() = %d\n", test.getI()); //3
return 0;
}
class和struct用法完全相同,区别:
struct定义类,所有成员默认属性public
class定义类,所有成员默认属性private
------/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.cpp
#include "Operator.h"
bool Operator::setOperator(char op) //不加Operator::,则变为全局函数
{
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;
}
------/main.cpp
#include <stdio.h>
#include "Operator.h"
int main(int argc, char *argv[]) //只需知道怎么使用,不用知道如何实现
{
Operator op;
double r = 0;
op.setOperator('/');
op.setParameter(8,4);
if( op.result(r) )
{
printf("Result is %f\n", r);
}
return 0;
}
类的精华在于封装:将实现细节和使用方式相分离
类定义和实现可分开到不同文件
使用类时,不需关心其实现细节,创建类时,才需考虑其内部实现细节
类成员作用域只在类内部,外部无法直接访问
成员函数可以直接访问成员变量和调用其它成员函数
类外部可通过类变量访问public成员
类成员作用域与访问级别没有关系
struct定义的类所有成员默认为public
int i = 1;
struct Test
{
private:
int i; //覆盖全局i
public:
int getI()
{
i = 3;
return i;
}
};
int main()
{
int i = 2;
printf("i = %d\n", i); //2
printf("::i = %d\n", ::i); //1 ::作用域分辨符 默认命名空间中的i
Test test;
printf("test.getI() = %d\n", test.getI()); //3
return 0;
}
class和struct用法完全相同,区别:
struct定义类,所有成员默认属性public
class定义类,所有成员默认属性private
------/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.cpp
#include "Operator.h"
bool Operator::setOperator(char op) //不加Operator::,则变为全局函数
{
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;
}
------/main.cpp
#include <stdio.h>
#include "Operator.h"
int main(int argc, char *argv[]) //只需知道怎么使用,不用知道如何实现
{
Operator op;
double r = 0;
op.setOperator('/');
op.setParameter(8,4);
if( op.result(r) )
{
printf("Result is %f\n", r);
}
return 0;
}
类的精华在于封装:将实现细节和使用方式相分离
类定义和实现可分开到不同文件