Chinaunix首页 | 论坛 | 博客
  • 博客访问: 251525
  • 博文数量: 52
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1538
  • 用 户 组: 普通用户
  • 注册时间: 2013-04-24 07:45
个人简介

生活就像海洋,只有意志坚强的人,才能到达彼岸。

文章存档

2013年(52)

分类: C/C++

2013-09-26 13:43:02

1、类的组合
不同类之间通过组合形成新的类。
2、类的封装
类通常分为两个部分:类的实现细节,类的实现方式;当使用类时,不需要关心其实现的细节,当创建一个类时,才需要考虑其内部实现细节。
封装的基本概念
根据日常生活中的经验:并不是类的每个属性都是对外公开的,而一些类的属性是对外公开的,因此,需要在类的表示法中定义属性和行为的公开级别。
C++中类的封装

成员变量
C++中用于表示类属性的变量
成员函数
C++中用于表示类行为的函数
在C++中可以给成员变量和成员函数定义访问级别
--public
-成员变量和成员函数可以在类的内部和外界访问和调用。
--private
-成员变量和成员函数只能在类的内部被访问和调用。
#include <stdio.h>

struct Biology
{
bool living;
};

struct Animal : Biology
{
bool movable;
void findFood()
{
}
};

struct Plant : Biology
{
bool growable;
};

struct Beast : Animal
{
void sleep()
{
}
};

struct Human : Animal
{
void sleep()
{
printf("I'm sleeping...\n");
}

void work()
{
printf("I'm working...\n");
}
};

struct Girl : Human
{
private:
int age;

public:
void play()
{
printf("I'm girl, I'm playing...\n");
}

void print()
{
age = 22;

printf("Girl's age is %d\n", age);

play();
sleep();
work();
}
};

struct Boy : Human
{
public:
int age;

void play()
{
printf("I'm boy, I'm playing...\n");
}

void print()
{
age = 23;

printf("Boy's age is %d\n", age);

play();
sleep();
work();
}
};

int main(int argc, char *argv[])
{
Girl girl;

girl.print();

Boy boy;

boy.print();

printf("Press any key to continue...");
getchar();
return 0;
}

类成员的作用域
类成员的作用域都只在类的内部,外部无法直接访问,成员函数可以直接访问成员变量和调用其它成员函数。
类的外部可以通过类变量访问public成员,类成员的作用域与访问级别没有关系。在C++中用struct定义的类的所有成员都默认为public
#include <stdio.h>

int i = 1;

struct Test
{
private:
int i;

public:
int j;

int getI()
{
i = 3;

return i;
}
};

int main()
{
int i = 2;

Test test;

test.j = 4;

printf("i = %d\n", i);
printf("::i = %d\n", ::i);
//printf("test.i = %d\n", test.i);
printf("test.j = %d\n", test.j);
printf("test.getI() = %d\n", test.getI());

printf("Press any key to continue...");
getchar();

return 0;
}

类的真正形态
struct在C语言中已经有了自己的含义,只能继续兼容,在C++中提供了新的关键字class用于类的定义,class和struct的用法是完全相同的。只是在用struct定义类时,所有成员的默认属性是public,在用class定义类时,所有成员的默认属性为private
#include <stdio.h>

struct A
{
int i;

int getI()
{
return i;
}
};

class B
{
int i;

int getI()
{
return i;
}
};

int main(int argc, char *argv[])
{
A a;
B b;

a.i = 1;
a.getI();

b.i = 2;
b.getI();

printf("Press any key to continue...");
getchar();
return 0;
}


一个运算类的实现
要求:
1、提供setOperator函设置运算类型加、减、乘、除
2、提供setParameter函数设置运算参数,类型整型。
3、提供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.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;
}
/*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);
}

printf("Press any key to continue...");
getchar();
return 0;
}


阅读(2437) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~