《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。

相关文章
|
19小时前
|
设计模式 Java C++
【C++高阶(八)】单例模式&特殊类的设计
【C++高阶(八)】单例模式&特殊类的设计
|
1天前
|
C++
c++的学习之路:7、类和对象(3)
c++的学习之路:7、类和对象(3)
16 0
|
2天前
|
存储 编译器 C语言
c++的学习之路:5、类和对象(1)
c++的学习之路:5、类和对象(1)
13 0
|
4天前
|
存储 安全 C语言
【C++】string类
【C++】string类
|
6天前
|
C++
面向对象的C++题目以及解法2
面向对象的C++题目以及解法2
13 1
|
存储 编译器 Linux
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
|
6天前
|
编译器 C++
标准库中的string类(上)——“C++”
标准库中的string类(上)——“C++”
|
6天前
|
编译器 C++
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(中)——“C++”
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(中)——“C++”
|
6天前
|
存储 编译器 C++
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(上)——“C++”
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(上)——“C++”
|
8天前
|
C++
【C++成长记】C++入门 | 类和对象(下) |Static成员、 友元
【C++成长记】C++入门 | 类和对象(下) |Static成员、 友元

热门文章

最新文章