首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么我不能在C++中从int继承?

为什么我不能在C++中从int继承?
EN

Stack Overflow用户
提问于 2010-01-27 06:07:18
回答 13查看 24.9K关注 0票数 74

我希望能够做到这一点:

代码语言:javascript
复制
class myInt : public int
{

};

为什么不行?

我为什么要这么做呢?更强的类型。例如,我可以定义两个类intAintB,这两个类允许我执行intA + intAintB + intB,但不能执行intA + intB

“Int不是类。”那又怎么样?

"Ints没有任何成员数据。“是的,他们有32位,或者别的什么。

“Int没有任何成员函数。”他们有一大堆像+-这样的运算符。

EN

回答 13

Stack Overflow用户

发布于 2010-01-27 06:08:54

因为int是本机类型而不是类

编辑:将我的评论移动到我的答案中。

它来自于C语言的传统,以及原语所代表的东西。c++中的原语只是一个字节的集合,除了对编译器之外,这些字节几乎没有意义。另一方面,一个类有一个函数表,一旦你开始沿着继承和虚拟继承的路径走下去,你就有了一个vtable。所有这些都不存在于原语中,通过使其存在,您将a)破坏大量假定int仅为8字节的c代码,以及b)使程序占用更多的内存。

换一种方式考虑一下。int/float/char没有任何数据成员或方法。把基本体想象成夸克--它们是你不能细分的积木,你用它们来制造更大的东西(抱歉,如果我的类比有点离谱,我对粒子物理学了解不够多)

票数 10
EN

Stack Overflow用户

发布于 2010-01-27 08:35:08

没有人提到过C++被设计成(主要)与C语言向后兼容,以方便C程序员的升级路径,因此struct默认对所有成员公开等。

int作为您可以覆盖的基类将从根本上使该规则变得复杂,而且会使编译器实现变得糟糕透顶,如果您希望现有的编码器和编译器供应商支持您的初学语言,这可能是不值得的。

票数 5
EN

Stack Overflow用户

发布于 2010-01-27 06:24:15

别人说的都是真的..。int是C++中的原语(与C#非常相似)。但是,只需围绕int构建一个类,就可以实现您想要的功能

代码语言:javascript
复制
class MyInt
{
private:
   int mInt;

public:
   explicit MyInt(int in) { mInt = in; }
   // Getters/setters etc
};

然后你可以继承所有你想要的东西。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2143020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档