指向另一个对象的指针

Pointer tho another Object

本文关键字:指针 一个对象      更新时间:2023-10-16

我有一点问题.. 我想做汽车登记,我想有所有者(指向 Person 对象的指针(,但是当我想用 get 函数获取所有者时,我不能这样做......这对我来说很神秘...也许我在某处有一点错误,我找不到它.请帮忙:)

class Person
{
    friend class Cars;
public:
    Person(){}
    Person(uint8_t age, string name) :m_age(age), m_name(name)
    {
        m_idGener = s_idGenerator++;
    }
    int getId()
    {
        return m_idGener;
     }
    uint8_t getAge()
    {
        return m_age;
    }
    string getName()
    {
     return m_name;
    }
 private:
    string m_name;
    uint8_t m_age;
    static int s_idGenerator;
    int m_idGener;
 };
 class Cars:public Person
 {
 public:
     Person *m_owner; // this is my pointer which i want to point to cars     Object 
  it will stay public for the test after the test i will move it in the     private section 
    Cars()
    {
    }
   // getters and setters 
    Cars setOwner(Cars &object, Person &owner) // with this function i set the owner 
    {
      object.m_owner = &owner;
    }
    Cars getOwner(Cars &object) /// here is my problem i can't take the owner 
    {
       return *(object.m_owner); // but i can't take the owner 
    }
     uint16_t getHorsePower()
    {
       return horsePower;
    }
     string getRegNumber()
    {
       return registrationNumber;
    }
  private:
     string m_manufacturerName;
     string modelName;
     uint16_t horsePower;
    string registrationNumber;
};
int Person::s_idGenerator = 0;

你犯了更多的错误。至少应更正以下内容:

Cars setOwner(Cars &object,  .....

此方法不返回值,因此它应为 void。car 对象应该是将为其调用方法的对象,而不是参数。

Cars getOwner(Cars &object) /// here is my problem i can't take the owner 
{
   return *(object.m_owner); // but i can't take the owner 
}

在这种方法中,我将返回类型更改为 Person * ,然后简单地返回 m_owner 。不需要参数。

修改后的工作示例:

#include <string>
#include <iostream>
using namespace std;
class Person
{
    friend class Cars;
public:
    Person(){}
    Person(uint8_t age, string name) :m_age(age), m_name(name)
    {
        m_idGener = s_idGenerator++;
    }
    int getId()
    {
        return m_idGener;
     }
    uint8_t getAge()
    {
        return m_age;
    }
    string getName()
    {
     return m_name;
    }
 private:
    string m_name;
    uint8_t m_age;
    static int s_idGenerator;
    int m_idGener;
 };
 class Cars:public Person
 {
 public:
     Person *m_owner; // this is my pointer which i want to point to cars     Object 
                      // it will stay public for the test after the test i will move it in the     private section 
    Cars()
    {
    }
   // getters and setters 
    void setOwner(Person &owner) // with this function i set the owner 
    {
      m_owner = &owner;
    }
    Person *getOwner() /// here is my problem i can't take the owner 
    {
       return (m_owner); // but i can't take the owner 
    }
     uint16_t getHorsePower()
    {
       return horsePower;
    }
     string getRegNumber()
    {
       return registrationNumber;
    }
  private:
     string m_manufacturerName;
     string modelName;
     uint16_t horsePower;
    string registrationNumber;
};
int Person::s_idGenerator = 0;
int main() {
  Person p(5,"Bill");
  Cars c;
  c.setOwner(p);
  cout << c.getOwner()->getName();
}

在这里:

Cars setOwner(Cars &object, Person &owner) // with this function i set the owner
{ 
object.m_owner = &owner;
}

您将值类型声明为"Cars",但不返回任何内容。

在这里:

Cars getOwner(Cars &object) /// here is my problem i can't take the owner
{ 
return *(object.m_owner); // but i can't take the owner 
}

您想返回"Person"对象,但再次将值类型声明为"Cars"。

因此,您可以像这样更改此函数:

第一:

void setOwner(Cars &object, Person &owner);

第二:

Person getOwner(Cars &object);