我希望能够做到这一点:
class myInt : public int
{
};
为什么不行?
我为什么要这么做呢?更强的类型。例如,我可以定义两个类intA
和intB
,这两个类允许我执行intA + intA
或intB + intB
,但不能执行intA + intB
。
“Int不是类。”那又怎么样?
"Ints没有任何成员数据。“是的,他们有32位,或者别的什么。
“Int没有任何成员函数。”他们有一大堆像+
和-
这样的运算符。
发布于 2010-01-27 06:08:54
因为int是本机类型而不是类
编辑:将我的评论移动到我的答案中。
它来自于C语言的传统,以及原语所代表的东西。c++中的原语只是一个字节的集合,除了对编译器之外,这些字节几乎没有意义。另一方面,一个类有一个函数表,一旦你开始沿着继承和虚拟继承的路径走下去,你就有了一个vtable。所有这些都不存在于原语中,通过使其存在,您将a)破坏大量假定int仅为8字节的c代码,以及b)使程序占用更多的内存。
换一种方式考虑一下。int/float/char没有任何数据成员或方法。把基本体想象成夸克--它们是你不能细分的积木,你用它们来制造更大的东西(抱歉,如果我的类比有点离谱,我对粒子物理学了解不够多)
发布于 2010-01-27 08:35:08
没有人提到过C++被设计成(主要)与C语言向后兼容,以方便C程序员的升级路径,因此struct
默认对所有成员公开等。
将int
作为您可以覆盖的基类将从根本上使该规则变得复杂,而且会使编译器实现变得糟糕透顶,如果您希望现有的编码器和编译器供应商支持您的初学语言,这可能是不值得的。
发布于 2010-01-27 06:24:15
别人说的都是真的..。int
是C++中的原语(与C#非常相似)。但是,只需围绕int
构建一个类,就可以实现您想要的功能
class MyInt
{
private:
int mInt;
public:
explicit MyInt(int in) { mInt = in; }
// Getters/setters etc
};
然后你可以继承所有你想要的东西。
https://stackoverflow.com/questions/2143020
复制相似问题