c++与C#在类的引用和声明上面的异同

比如我们有个类:
class A
{
...
}

比较1:
A a; //c#版本
A *a;//c++版本

c#下面,语句“A a;” 等价于c++下面的 A *a;
本质上,都是声明了一个指向A的指针,但是指针的内容为空。(c++下面的指针内容不一定为空,具体内容可能是个任意值)
如果这个时候就使用a的话,都会出错。错误的原因就是“未将对象的引用指向对象的实例”。

比较2:
A a = new A(); //c#版本
A *a = new A; c++版本
c#下面,此语句创建一个A的实例对象,然后让a指向这个对象,其中明确指出在创建A的实例的时候,用的是A的默认构造函数。
c++下面,也是一样的。不同的地方在于,如果没有明确指出用哪个构造函数,就会默认调用那个不带参数的默认构造函数。比如上面的那句。

比较3:
A a; //c#版本
A a; //c++版本
这两个语句看着一样,实际是不一样的。
c#中,仅仅是声明了一个A类型的指针a,而且a现在的值是空的,也就是null。
c++中,创建了一个A的实例对象,调用的是A的默认构造函数,a就是一个实例对象,不是指向实例对象的指针。

比较4:
c++中,对类里面普通的成员变量,不允许在声明的地方进行赋值。因此
class B
{
A *a;//合法,没有赋值
A *a = new A;//不合法,进行了赋值
A a;//合法,并且给a赋了值,调用了A()
A a();//合法,但是……这个是声明了一个方法,呵呵
}

c#没有这个限制。
class B
{
A a;//合法,a为null
A a = new A();//合法,可以这么做
}

总结:
从功能上将,c++和c#都可以声明一个空的引用,也可以在声明引用的时候就给引用赋值。
区别在于,声明的时候,c++只能利用语法的特点,仅仅能用默认构造函数创建实例。而c#则没有限制。

不过,一般来讲,声明的时候,最好不要赋值。如果需要,就放到构造函数里面。c++和c#的开发指导也是这么建议的。


下面再总结一下名字空间和引用:
c#因为具备自描述功能,所以如果要使用某个名字空间下面的类,只需要在开头using它的名字空间就可以了。
c++除了要using相应的名字空间外,还得include相关的头文件。而且,c++下面的using,会对后面的内容产生影响。所以,一般来说,在头文件里面都不提倡使用using。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值