繁体   English   中英

C++类和指针

[英]c++ classes and pointers

我有这个硬件问题

创建一个名为gender 的枚举数,它有两个可能的值,男性和女性。

Person 类定义在以下代码中给出。 使用所有必需的类和枚举器来实现它,并测试 main 中的所有成员函数。

 #ifndef Person_h #define Person_h #include <iostream> #include "address.h" // header file for the Address class #include "gender.h" // header file for the Gender enum using namespace std; class Person { public: Person(); Person(const char * n, const Gender * g, const Address * ad); Person(const Person & f); void setName(char * n); void setAds( Address * ad ); char * getName()const ; Address *getAds()const ; ~Person(); private: char * name; Gender * gender; Address * ads; }; #endif

这是我的尝试:

地址.h

#pragma once
class Address
{
public:
    Address(const char *streetv="noName", const char*telv="noTel", const int POBoxv=0);
    Address(Address &address);
    ~Address();
    void setAll(const char *streetv, const char*telv, const int POBoxv);
char *getStreet()const;
char *getTe ()const;
int getPOBox()const;
void setStreet(char *str);
void setTel(char *t);
void setPOBox(int po);

private:
    char *street;
    char *tel;
    int POBox;

};

enum Gender{Male,Female,unknown};

地址.cpp

#include "Address.h"
#include<iostream>
using namespace std;


Address::Address(const char *streetv, const char*telv, const int POBoxv)

{
    street=new char[30];
    strcpy(street,streetv);
    tel=new char[30];
    strcpy(tel,telv);
    POBox=POBoxv;

}

人.h

#pragma once
#include "Address.h"
class Person
{
public:
    Person();
    Person(const char * n, const Gender * g, const Address * ad);
    Person(const Person & f);
    void setName(char * n);
    void setAds( Address * ad ); 
    char * getName()const ;
    Address *getAds()const ;
    ~Person();
private:
    char * name;
    Gender * gender; 
      Address * ads;

};

个人.cpp

#include "Person.h"
#include "Address.h"
#include<iostream>
#include<cstring>
using namespace std;

Person::Person()
{
    name=new char[30];
    strcpy(name,"unknown");
    gender=new Gender;
    *gender=unknown;
    ads->setAll("unknown","unknown",0);
}

Person::Person(const char * n, const Gender * g, const Address * ad)

{
    name=new char[30];
    strcpy(name,n);
    *gender=Male;
     *ads=*ad;

}



void Person:: setName(char * n){

    name=new char[30];
    strcpy(name,n);
}


void Person:: setAds( Address * ad ){

    ads=ad;
}

char* Person::getName()const{

    return name;
}

Address* Person::getAds()const{

    return ads;
}



Person::Person(const Person & f){
    name=f.name;
    gender=f.gender;
    ads=f.ads;

}

Person::~Person(void)
{
    delete [] name;
}

主要的

#include "Address.h"
#include "Person.h"
#include<iostream>
using namespace std;


void main(){
    Address ad("New street","0501234567",1234);
    //testing Person();
    Person pe;
    cout<<"Name: "<<pe.getName()<<" Street: "<<pe.getAds()<<endl;

    //testing Person(const char * n, const Gender * g, const Address * ad);
    Person p ("Adam",Male,ad);
    cout<<"Name: "<<pe.getName()<<" Street: "<<pe.getAds()<<endl;

    //testing Person(const Person & f);
    Person p2 (pe);
    cout<<p2.getAds()<<endl;

    //testing set functions
    p2.setName("Ali");
    p2.setAds(&ad);

    //testing get functions

    cout<<"Name: "<<pe.getName()<<" Street: "<<pe.getAds()<<endl;
}

编译器一直在这一行突出显示 main 中的“Adam”这个词

Person p ("Adam",Male,ad);

因为“没有构造函数“Person::Person”与参数列表匹配”

即使我删除了该行,编译器也会无缘无故地崩溃,你能帮忙吗?

假设Gender是一个枚举类型(应该是),问题是,构造函数签名需要一个指向Gender枚举参数的指针:

 Person::Person(const char * n, const Gender * g, const Address * ad)
                             // ^^^^^^^^^^^^^^^^

但是你在main()传递了普通的枚举值:

Person p ("Adam",Male,ad);
              // ^^^^

构造函数签名应更改为

 Person::Person(const char * n, Gender g, const Address * ad)
                             // ^^^^^^^^

或者您应该在调用时采用(可选const )枚举变量的地址:

const Gender g = Male;
Person p ("Adam",&g,ad);
              // ^

另请注意,为Gender构造函数参数提供的任何内容都未在您的定义中使用:

Person::Person(const char * n, const Gender * g, const Address * ad) {
    name=new char[30];
    strcpy(name,n);
    *gender=Male; // <<<<< Always initialized to Male, regardless g's value, and no memory allocated at all
    *ads=*ad;
}

应该:

 gender = new Gender(*g);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM