Why don't structs support inheritance?

9 篇文章 0 订阅

假设.net中的struct可以inherit。现有这样的代码:

BaseStruct a;
SubStruct b; //inherits from BaseStruct, added fields, etc.

a = b; //?? expand size during assignment?

这会出什么问题?因为struct是value type不是reference type,他们是copy by value,上面的a的size根本不能容纳下b。

所以.net不支持。


在native c++又是如何呢?

同样的代码在native c++中,是可以的:虽然通过了编译,但是功能上有问题(有object slice)。这就又回到了copy by value, copy by reference的问题上。如果上面的a和b都是指针(相当于.net中的reference type),同时重写了operat=(这个容易忘,所以容易出错),那么就不会有问题。c++给程序员提供了更多的控制权:new出来的在heap上,只能通过指针来引用;非new出来的,在stack上,按位copy。

不巧的是,.net中,在heap还是在stack上,不是又程序员决定的,而是由type决定的。.net天然地帮我们定好 了每种type是reference type还是value type。


.net这个有受限,c++这个强是强但容易出错,到底哪个好呢?应了一句话,权利越大,责任越重!自己选吧!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值