c++学习笔记(6.类的封装)
来源:互联网 发布:淘宝保存的草稿在哪里 编辑:程序博客网 时间:2024/05/19 15:22
本节知识点:
1.面向对象中的基本概念:
a.类是用于抽象的描述一类事物所特有的属性(即变量)和行为(即函数)的
b.对象是一个具体的事物,是属于某一个类的一个实体,拥有其所属类的所有属性和行为
c.类与类直接是可以继承的,子类可以继承父类中的属性和行为,代码如下:
struct Biology //这里暂用c语言的方式{ bool living;};struct Animal : Biology { bool movable; void findFood() { }};Animal类就是Biology类的一个子类,冒号表示继承,Animal类中可以使用living变量,原因就是它是从Biology类中继承来的子类。
2.类中的封装:
a.封装的含义:封装其实就是把客观事物抽象成为类(即类的实现过程),在这个过程中忽略类的实现细节(即使用private让类的属性和行为不可被外界调用),把类的使用方式以接口的形式体现出来(即使用public让类的属性和行为可被外界调用)。 b.成员变量:c++中用于表示类属性的变量
成员函数:c++中用于表示类行为的函数
c.在c++中可以给成员变量和成员函数定义访问级别:
public:成员变量和成员函数可以在类的内部和外界访问和调用
private:成员变量和成员函数只能在类的内部被访问和调用(父类中的private也只能在父类中使用,子类是用不了的)
d.c++为了兼容c语言,所以一直保留着struct关键字,其实c++中的新关键字class才是在定义类的时候使用的
class与struct的区别:两者用法完全相同,只是class定义的类中所有成员的默认属性是private,struct定义的类中所有成员的默认属性是public,并且两者的默认的继承方式也是不一样的。
3.类成员的作用域(本节最重要的部分):
a.类成员的作用域都只在类的内部,外部无法直接访问,成员函数可以直接访问成员变量和调用其他成员函数,切记类成员的作用域与访问级别没有关系,类的外部通过类变量(即类的对象)访问public成员,这已经不再是类成员的作用域了。
b.c语言中的作用域问题(示例代码如下):
#include <stdio.h>#include <malloc.h>int i = 9; //这个全局变量的作用域 是从此处开始 一直到程序结束 int main(){printf("%d\n",i); //此处是数值为9的作用域 int i = 2; //这里数值为2覆盖了 数值为9的作用域 以数值2为准 {int i = 0; //在这个大括号中 为0的覆盖了 为2的作用域 printf("%d\n",i);}int j = 0; for(; i--; ){printf("hhh\n");int i = 9; //这种作用域覆盖的情况在for循环中依然存在 }printf("%d\n",i);}注意:作用域覆盖的情况,同名变量的作用域被覆盖了的情况,以后者为准
本节练习:
1.本节的练习是写一个运算类(此例子中将类的实现和声明分开了):
代码如下:
op.cpp文件:
#include "op.h"bool Operator::setParameter(char cop) //这里 Operator::setParameter说明setParameter是Operator类的成员函数 {bool ret = false;if(('+' == cop) || ('-' == cop) || ('*' == cop) || ('/' == cop)){op = cop;ret = true;}else{op = '\0';}return ret;}void Operator::setOperator(double p1, double p2){op1 = p1;op2 = p2;}bool Operator::result(double& r){bool ret = true;switch (op){case '/':if( (-0.000000001 < op2) && (op2 < 0.000000001) ) { ret = false; } else { r = op1 / op2; } break; case '+': r = op1 + op2; break; case '*': r = op1 * op2; break; case '-': r = op1 - op2; break; default: ret = false;}return ret;}
op.h文件:
#ifndef __OP_H__#define __OP_H__class Operator //这里面是类的声明 {private:char op;double op1;double op2;public:bool setParameter(char cop); //类成员变量的声明 void setOperator(double p1, double p2);bool result(double& r);};#endif
main.cpp文件:
#include <stdio.h>#include "op.h"int main(){Operator op;op.setParameter('/');op.setOperator(2.0 , 3.0);double d = 0.0;op.result(d);printf("%f\n",d);return 0;}
- c++学习笔记(6.类的封装)
- 类的封装学习笔记
- 精通C#:Chapter5 封装-学习笔记
- C++基础学习笔记----第八课(类的封装)
- Objective-C基础学习笔记(三)-面向对象的三大特性之封装
- Nginx学习笔记(三):封装的数据结构
- OC学习笔记之类的封装
- java学习笔记-理解封装的概念
- java学习笔记--封装的注意点
- 【从C到C++学习笔记】类声明/公有私有保护成员/数据抽象和封装
- OBJ-C匿名对象和封装学习笔记
- Object-c------类的封装
- GDAL学习笔记—简单类封装
- 学习笔记:CString封装
- JAVA学习笔记--封装
- C的学习笔记
- 模块的封装(一):C语言类的封装
- C++数据的封装和类体内定义成员函数的学习笔记
- asp.net mvc 抓取京东商城分类
- 成功者具备的十三个好习惯
- pl/sql模拟登录并获取Oracle ebs职责
- stl
- 通过Ip查询登录地址
- c++学习笔记(6.类的封装)
- Eclipse引入JDK源代码
- UNICODE中的格式化
- sgu 172 eXam 二分图染色
- 各大语言概述
- C语言中的左值和右值
- POJ1833:排列
- linux 里的一些英文缩写含义
- try...catch...finally中try块发生的事件顺序