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

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

报告相同问题?

悬赏问题

  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)