其中一个原因 值得传递方式和引用传递的方式 struct A{ int n; int m; } A a1,a2; a1 = a2; 相当于a1.n=a2.n 和a1.m=a2.m; a1 于a2 之后没有任何关系,修改a1的字段不会影响到a2; class B{ int n; int m; } B b1 , b2; b1=b2; b1 指向了b2的地址,只是地址传递 假设struct允许继承 先看看 class class A{ int m; } class B:A{ int n; } 完全可以 B b = new B; A a = b; 如果 struct ?struct A{ int m; } struct B:A{ int n; } B b; A a = b; // a.m = b.m a.? = b.n b 的 n 怎么办 ,只有裁剪对象了 ,b的n 丢掉了 class 的话 B b =new B; A a = b; B b1 = (B)a 不回丢掉任何东西,只是地址的传递,而结构就不同了 在c++中只有对指针和引用,继承方式才有效,而对于值是会有问题的。c#也是如此
值得传递方式和引用传递的方式
struct A{
int n;
int m;
}
A a1,a2;
a1 = a2; 相当于a1.n=a2.n 和a1.m=a2.m; a1 于a2 之后没有任何关系,修改a1的字段不会影响到a2;
class B{
int n;
int m;
}
B b1 , b2;
b1=b2; b1 指向了b2的地址,只是地址传递
假设struct允许继承
先看看 class
class A{
int m;
}
class B:A{
int n;
}
完全可以
B b = new B;
A a = b;
如果 struct ?struct A{
int m;
}
struct B:A{
int n;
}
B b;
A a = b; // a.m = b.m a.? = b.n
b 的 n 怎么办 ,只有裁剪对象了 ,b的n 丢掉了
class 的话 B b =new B; A a = b; B b1 = (B)a 不回丢掉任何东西,只是地址的传递,而结构就不同了
在c++中只有对指针和引用,继承方式才有效,而对于值是会有问题的。c#也是如此