返回0的新函数的指针

时间:2018-03-19 17:11:10

标签: c++ function pointers return

为什么我的指针' pTwo'在main()中返回函数的一半(名称​​' fiddo' )但是对于看起来是数字19的整数的年龄返回0?

* Dog pTwo = new Dog(" Fiddo",19);

下面我有一些正常工作的对象......比如SetDogName和SetAge

Getage()是否是合适的会员?它返回'此' - >年龄

    #include <iostream>
    #include <string>

    class Dog { 
       private:
        std::string aDogName;
         int age;

       public:
        Dog(); //constructor 
        Dog(std::string dogName, int age);
        ~Dog(); //destructor

        void SetDogName(std::string dogName); //setter
        std::string GetDogName();  //getter

        void SetAge(int age);
        int Getage(); //integer function

        void SayHello();  

    };

    class Person { 
        public:

        Person();

        ~Person(); 

        void SayHello();

    };

    /////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////


    Dog::Dog() { //dog constructor


    }


    Dog::Dog(std::string dogName, int age) { 
        aDogName = dogName;
        age = age; 
        }


    Dog::~Dog() { //dog destructor


    }

    void Dog::SetDogName(std::string dogName) {
        this->aDogName = dogName;

    }

    std::string Dog::GetDogName() { 
        return this->aDogName;

    }

    void Dog::SetAge(int age) { 
        this->age = age;
    }

    int Dog::Getage() { 
        return this->age; 
    }

    void Dog::SayHello() { 
        std::cout << "Woof!" << std::endl;
        }

    /////////////////////////////////////////////////
    /////////////////////////////////////////////////

    Person::Person () { 


    }

    Person::~Person()
    { 


    }

     void Person::SayHello() {

        std::cout << "Hello." << std::endl;

    }

    /////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////

    int main()
    { 


        Dog *pTwo = new Dog("Fiddo", 19);

        std::cout << pTwo->GetDogName() << std::endl;
        std::cout << pTwo->Getage() << std::endl;





      Dog d; 
      Person p;

    d.SetDogName("Puppy");
    std::cout << d.GetDogName() << std::endl;

    d.SetAge(16); 
    std::cout << d.Getage() << std::endl;



      p.SayHello();
       d.SayHello();



    }

1 个答案:

答案 0 :(得分:3)

age = age; 

你的问题就在这里。参数age遮盖了成员变量,因此您只需将参数设置为自身。

使用字段初始化列表,重命名参数或使用this-> *指定要解决此问题的成员:

Dog::Dog(std::string dogName, int age) : aDogName(dogName), age(age) { }

*感谢@DrewDormann!