zoukankan      html  css  js  c++  java
  • C++类成员函数的传参问题

      最近代码中经常会出现,成员函数传参经常会发生值传不进去的情况,也是比较低级的错误,这里整理一下供大家参考一下。


       (1)成员变量名与形参名相同

    World::World(unsigned maxContacts, unsigned iterators)  
    {  
        resolver = iterators;  
        maxContacts = maxContacts;  
        contacts = new ParticleContact[maxContacts];  
        calculateIterations = (iterators == 0);  
    }  

      这里看一下第4行代码。这里本意是把成员函数的形参传给成员变量,命名的时候两者正好重名。这样写并没有语法错误,但是会导致形参无法传给成员变量。修改方法如下:

    World::World(unsigned maxContacts, unsigned iterators)  
    {  
        resolver = iterators;  
        World::maxContacts = maxContacts;  
        contacts = new ParticleContact[maxContacts];  
        calculateIterations = (iterators == 0);  
    }  
    

       此外,还有另一种方法如下:

    World::World(unsigned maxContacts, unsigned iterators)  
    {  
        resolver = iterators;  
        this->maxContacts = maxContacts;  
        contacts = new ParticleContact[maxContacts];  
        calculateIterations = (iterators == 0);  
    }

       (2)类实例赋值给指针

    void Particle::SetParticle(Particle particle)
    {
         /*m_particle为指针*/    
         m_particle = &particle;
    }
    

      这里由于形参particle为局部变量,即使m_paritcle已经指向了了particle,但是运行完这个函数,m_particle指向的还是空的地址。所以,一种方案是加引用,另一种方案就是直接传指针,代码如下:

    void Particle::SetParticle(Particle& particle)
    {
         /*m_particle为指针*/    
         m_particle = &particle;
    }
    

      

    void Particle::SetParticle(Particle* particle)
    {
         /*m_particle为指针*/    
         m_particle = &particle;
    }

       暂时就这么多,以后遇到继续补充。

      

     

  • 相关阅读:
    九、springboot整合RabbitMq 用死信队列做延迟队列
    八、RabbitMq死信队列与延迟队列
    七、RabbitMq交换机
    六、RabbitMq 发布确认模式(confirm模式)
    五、RabbitMq的消息应答机制
    四、RabbitMq的工作模式( Work Queues)
    三、RabbitMq简单模式(hello world)
    qt 使用属性设置替换样式,为无setstylesheet接口的的action设置样式
    SpringBoot配置国际化
    基于策略模式的前端表单设计
  • 原文地址:https://www.cnblogs.com/caster99/p/4687870.html
Copyright © 2011-2022 走看看