《C++面向对象高效编程(第2版)》——1.6 什么不是类-阿里云开发者社区

开发者社区> 异步社区> 正文

《C++面向对象高效编程(第2版)》——1.6 什么不是类

简介:
+关注继续查看

本节书摘来自异步社区出版社《C++面向对象高效编程(第2版)》一书中的第1章,第1.6节,作者: 【美】Kayshav Dattatri,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.6 什么不是类

C++面向对象高效编程(第2版)
理解何时不能将某些部分设计成类也非常重要。将函数组合到一起是把模块(或者把简单的C头文件)转化为类的效果,这不是真正的类。其实,只需从模块中取出函数,并让它们成为公有成员函数,你就拥有了一个类!类并不仅仅是一组函数,它的含义比这多得多。

例如,考虑一个模块,它实现一组数学函数,如开方、求幂、求倒数等。有人可能试图(错误的)将这个模块转换为MathHelper类。

class MathHelper {
    public:
      double Sqrt(double aNumber);
      double Power(double aNumber, int raiseTo);
      double Inverse(double aNumber);
    private:
      // 一个私有数据也没有!
};```
这里的问题在于,MathHelper类的内部没有任何数据需要管理。客户调用一个成员函数,并为其提供实参,成员函数利用客户所提供的实参完成必要的计算。但是,在计算时,成员函数无需类的帮助,类中也没有任何数据供成员函数使用。函数只是简单地组合到一起(没有必要),它们没有共同点。这样的类包含的是一组函数(代码),没有数据。较好的方案是创建Number类,并为Number类提供操作。
![image](https://yqfile.alicdn.com/d6d00469858f65cabde2732403240ab2ac063240.png)

图1-4

class Number {
    public:
       Number Sqrt();
       Number Power(Number raiseTo);
       Number Inverse();
       Number Absolute();  // 计算绝对值
    private:
       // 内部表示,用于存储数字
};`
在这种情况下,Number类控制了数字的内部表示。因为客户并不了解这些内部表示,所以从逻辑上讲,是类提供了所需的操作。

进一步分析这个设计,我们可以构思一个继承层次,用于代表不同类型的数字(实数、整数、复数等)。这些类型可以成为Number的派生类(或子类),如图1-4所示。

继承将在第5章和第6章中讨论。

类似地,一个C“结构”不能直接成为一个类。不能将结构修改成类,让所有数据成为私有数据,然后添加一组函数来获得和设置数据成员,这不是类。类不只是一组允许客户获取和设置数据成员值的函数。数据封装隐藏了类中的数据,而且通过成员函数提供更高层次的抽象。如果只是让函数读写结构中的数据,其实并未简化任何东西。只包含获值函数(getter)和设值函数(setter)的类是糟糕的设计1。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
一文带你迅速搞懂包是什么 | 带你学《Java面向对象编程》之六十七
高效的编程往往免不了多人合作,本节提到的包的概念可以有效避免重名类出错的问题。
365 0
C# Redis Server分布式缓存编程(二)
在Redis编程中, 实体和集合类型则更加有趣和实用 namespace Zeus.Cache.Redis.Demo { public class Person { public int Id { get; set; } public ...
989 0
不熟悉的编程语言,项目如何开展?
引言 公司中的开发一般是沿着一种核心开发语言如Java、C/C++、PHP进行相关开发。但由于产品新需求、项目新需要,免不了会使用自己不擅长的语言开发。甚至,现在全栈工程师也比比皆是。对于经验不丰富的职场人,如何开展工作呢? 结合我近期的项目经历,我说下我的经验和教训。
14 0
+关注
异步社区
异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。
12049
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载