iteye_3639 2011-04-11 10:20
浏览 293
已采纳

声明函数时候,形参为什么有时候用指针对象,有时候使用普通类对象?

声明函数时候,形参为什么有时候用指针对象,有时候使用普通类对象?为什么不能像java都使用普通类对象?难道类对象作用不能实现到指针对象功能?比如代码如下:
class A
{

}

class B(
public:
B(A* aaa);//这里为什么不用A aaa去掉指针
//普通类传参有什么区别
B(A aaa);
}

  • 写回答

1条回答 默认 最新

  • turing-complete 2011-04-11 10:48
    关注

    [quote]class B(
    public:
    B(A* aaa);//这里为什么不用A aaa去掉指针
    //普通类传参有什么区别
    B(A aaa);
    } [/quote]

    1、传指针(和引用)是非常快的,f(A aaa);这种形式 在传参数的时候,会首先调用类A的赋值构造函数。而f(A* aaa);则只需要传递一个4字节的地址即可。

    2、f(A* aaa); 在它的函数体内改变aaa指向的对象,则源对象被改变。f(A aaa);在函数体内改变aaa对象,源对象不被改变,亦即实参不被改变,被改变的只是副本。

    3、c++的多态特性只能建立在指针和引用的基础之上,不能想Java那样直接建立在对象基础之上。
    例如:
    前提:AA 是 A的派生类,f为A中的虚函数
    A a= AA(aa);
    a.f();//它执行的是A类中的f

    A *a= new AA();
    a->f();//它执行的是AA类中的f

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 FFmpeg 成功推流到 Nginx RTMP 服务器但无法用 ffplay 或 VLC 播放
  • ¥15 用G92修改坐标,结果无效。
  • ¥15 请修改以下C语言代码使其能正确输出最短路径
  • ¥20 抖音商城拉码器安卓报错求解决办法或者有新的拉码脚本也可以介绍一下
  • ¥15 MPLAB IDE V2.35 报错make[2]: *** [build/default/production/_ext/1472/MSSP_I2C.p1] Error 1
  • ¥15 Unity2D URP项目TextMeshPro(3D)无法显示文字
  • ¥15 新唐M451 DTMF检测和发送代码修改
  • ¥15 在国外文献网站里点击view pdf 加载异常缓慢甚至加载不出来。
  • ¥65 python批量提取发票的信息
  • ¥15 虚幻五引擎内容如何上传至网盘?