1. 类的真正形态
C++中使用class来定义类,默认访问级别是private,用struct来定义类时,默认级别为public
实例分析:Operator类的分析
#include <iostream>
using namespace std;
class Operator
{
public:
bool setOperator(char op);
void setParameter(double dPar1,double dPar2);
bool result(double& r);
private:
char cOp;
double dParameter1;
double dParameter2;
};
bool Operator::setOperator(char cOp)
{
bool ret = false;
if ((cOp == '+') || (cOp == '-') || (cOp == '/') || (cOp == '*'))
{
ret = true;
this->cOp = cOp;
}
else
{
this->cOp = '\0';
}
return ret;
}
void Operator::setParameter(double dPar1, double dPar2)
{
this->dParameter1 = dPar1;
this->dParameter2 = dPar2;
}
bool Operator :: result(double& r)
{
bool bRet = true;
switch (cOp)
{
case '+':
r = dParameter1 + dParameter2;
break;
case '-':
if ((-0.000000001 < dParameter1) && (dParameter2 < 0.000000001))
{
bRet = false;
}
else
{
r = dParameter1 / dParameter2;
}
break;
case '/':
r = dParameter1 / dParameter2;
break;
case '*':
r = dParameter1*dParameter2;
break;
default:
break;
}
return bRet;
}
int main()
{
Operator op;
double r;
op.setOperator('+');
op.setParameter(12, 10);
if (op.result(r))
{
printf("r = %lf", r);
}
else
{
printf("Calculate error!\n");
}
return 0;
}
2.域名作用符
- global scope(全局作用符),用法(::name)
- class scope(类作用符),用法(class::name)
void Operator(类名)::setParameter(double a, double b);
- namespace scope(命名空间作用域符),用法(namespace::name)他们都是左关联(left-associativity)
2.1 编程实验
#include <iostream>
using namespace std;
int i = 0;
class test
{
public:
static int i;
};
int test::i = 2;
namespace iTest
{
int i = 3;
}
int main()
{
cout << "::i" << ::i << endl;
cout << "test::i" << test::i << endl;
cout << "iTest::i" << iTest::i << endl;
return 0;
}
结果:
::i = 0
test::i = 2
iTest::i = 3
3. 小结
- C++引进新的关键字class用来定义类
- struct和class的区别在于默认访问级别的不同
- C++中类支持声明和实现的分离
- 在
头文件中声明类
- 在
源文件中声明类