C++ 面向对象封装特性的实例分析与应用扩展(二)
案例 2:点和圆的关系
回顾
封装意义一:
在设计类的时候,属性和行为写在一起,表现事物
语法: class 类名{ 访问权限: 属性 / 行为 };
**示例 1:**设计一个圆类,求圆的周长
示例代码:
封装意义二:
类在设计时,可以把属性和行为放在不同的权限下,加以控制
访问权限有三种:
public 公共权限
protected 保护权限
private 私有权限
题目
设计一个圆形类(Circle),和一个点类(Point),计算点和圆的关系。
代码解析
案例刨析
案例原理:通过比较点与圆心的距离与半径的距离来判断点与园 的位置关系。
案例核心 1:一个类可以作为另一个类的成员!
点类可以作为圆类的成员
案例核心 2:可以把类拆到另外一个文件里面,头文件写声明,源文件写实现。
主体文件之用来存放判断点和圆的关系的函数和 main 函数,使程序的目的更加明确,代码更加易读。
分别创建点类和圆类.h 的头文件用来存放类的声明,圆类和点类的.cpp 源文件存放类的实现。
注意在两个文件的类里去除相应的内容!
注意在类的实现里要加上作用域,因为实现里不写类的声明!类的实现里需要引入头文件。
圆类的声明,圆类的实现。
注意要引入点类的头文件!
扩展:#pragma once
#pragma once 是一个比较常用的 C/C++预处理指令,只要在头文件的最开始加入这条预处理指令,就能够保证头文件只被编译一次。在 C/C++中,在使用预编译指令 #include 的时候,为了防止重复引用造成二义性,通常有两种方式——
第一种是 #ifndef 指令防止代码块重复引用
第二种就是 #pragma once 指令,在想要保护的文件开头写入
#pragma once 一般由编译器提供保证:同一个文件不会被包含多次。这里所说的”同一个文件”是指物理上的一个文件,而不是指内容相同的两个文件。无法对一个头文件中的一段代码作 #pragma once 声明,而只能针对文件。此方式不会出现宏名碰撞引发的奇怪问题,大型项目的编译速度也因此提供了一些。缺点是如果某个头文件有多份拷贝,此方法不能保证它们不被重复包含。在 C/C++中,#pragma once 是一个非标准但是被广泛支持的方式。
#pragma once 方式产生于 #ifndef 之后。#ifndef 方式受 C/C++语言标准的支持,不受编译器的任何限制;而 #pragma once 方式有些编译器不支持(较老编译器不支持,如 GCC 3.4 版本之前不支持 #pragmaonce),兼容性不够好。#ifndef 可以针对一个文件中的部分代码,而 #pragma once 只能针对整个文件。相对而言,#ifndef 更加灵活,兼容性好,#pragma once 操作简单,效率高。
版权声明: 本文为 InfoQ 作者【CtrlX】的原创文章。
原文链接:【http://xie.infoq.cn/article/8922eff5868fc700543c7c0f8】。文章转载请联系作者。
评论