指针,引用和对象化实例

所有由java转到c++的程序员都有很多相同的疑问。

其中对我而言,非常大的疑问在于new不new的问题,与*不*。

当实例化一个对象时,

在java中,惯用的方式是

A a = new A();

而在C++中,惯用的方式是

A *a = new A;

当然也有这种方式:

A a;

区别在哪呢,当程序只有一个实例时,保存A a,不需要浪费new开辟空间。当需要多个实例时,需要A *a = new A; 

之所以没有new A()是执行了默认构造函数,当然有括号也是可以的。

开始我以为A *a = new A; 与 A aObj; 的区别只在于sizeof(a)=4,而sizeof(aObj)=sizeof(A)远比指针大得多,所以选择指针而非对象。

其实更深层的在于继承中的多态![见Inside the C++]

class A{

public:

virtual void fun(){

std::cout<<"i am A";

          }

};

class B:public A{

void fun(){

std::cout<<"i am B";

}

};


B b;

A a = b;

a.fun();  


结果为i am A


而B b; 

A &a=b

a.fun();

结果为i am B


当然

B b; 

A *a=&b

a->fun();

结果也为i am B

所以,只有通过指针和引用才能支持多态


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
中科院高性能胡伟武老师答案完整版 1. 解:A为10MIPS,B为20MIPS,C为40MIPS。 三台机器实际性能相同。 2. 解:加速比y与向量化比例x之间的关系是:y=1/((1-x)+x/8)=1/(1-7x/8)……(A) (1) (2) 在式(A)中令y=2,可解得x=4/7≈57.14%。 此时向量模式运行时间占总时间比例是((4/7)/8)/(3/7+((4/7)/8))=1/7=14.29% (3) 硬件方法,整体加速比为1/(1-0.7*(1-1/16))=2.91 软件方法,设相同加速比下向量化比例为x,即1/(1-7x/8)=2.91, x=0.75 所以推荐软件方法。 3. 解: (1) MIPSEMUL=(I+F×Y)/(W×106) ;MIPSFPU=(I+F)/(B×106) (2) 120=(I+8×106×50)/(4×106) => I=80×106 (3) 80=(80×106+8×106)/(B×106) => B=1.1 (4) MFLOPS=F/((B-((W*I)/(I+F*Y))) ×106)≈18.46 (5) 决策正确,因为执行时间缩短了,这才是关键标准。 4. 解: (1) y=12.29386-0.18295x+0.0015x2 (2) y=342.47443-6.36386x+0.02727x2 5. 解: 1.1V下静态功耗1.1*1.1/(1.05/0.5)=0.576W 1.1V下1GHZ时动态功耗为1.1*2.5-0.576=2.174W 1.1V下0.5GHZ功耗功耗为2.174*0.5/1=1.087W 1.1V下0.5GHZ总功耗为1.087+0.576=1.663W 6. 解: a) 先证明N=2k时,正数 。对k进行数学归纳法即可。当2k-1<N<2k时,令 ,则 。若 , ,矛盾。因此当当2k-1<N<2k时, 。 b) 证:假设参考机的程序分值为Z={ , },其中n为SPEC CPU2000中的程序个数; 而A机器的程序分值为X={ } B机器的程序分值为Y={ } 则有: A机器的性能为: ,B机器的性能为: 从而,A与B机器的性能比为: 可见,其结果与参考样机无关。故得证。 7. 解: AMD 4核Barcelona,2.8G,3发射每个核1个128位浮点向量功能部件和1个128位浮点加法向量部件,峰值性能4*4*2.8=44.8GFlops。 2路L1I 64KB;2路L1D 64KB 3 latency;16路L2 512KB;32路2MB共享L3,内存带宽21.34GB/s Intel 4核Nehalem(i7),2.5G-3G,4发射每个核1个128位浮点向量功能部件和1个128位浮点加法向量部件,峰值性能4*4*3=48GFlops。4路L1I 32KB;4路L1D 32KB 4 latency;8路256KB L2 12 latency;16路8MB L3 30-40 latency;内存带宽31.92GB/s

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值