关于编写代码的C++建议

Nad*_*ern 1 c++

我在编写应该编写代码的方式时遇到困难.这是我的默认构造函数:

Address::Address() : m_city(NULL), m_street(NULL), m_buildingNumber(0), m_apartmentNumber(0)
{}
Run Code Online (Sandbox Code Playgroud)

......这是我的另一个构造函数:

Address::Address(const char* city, const char* street, const int buildingNumber,const int apartmentNumber) : m_city(NULL), m_street(NULL)
{
    SetAddress(city,street,buildingNumber,apartmentNumber);
}
Run Code Online (Sandbox Code Playgroud)

我必须初始化我们的城市和街道字段,因为它们包含char *,我的setter使用remove来设置一个新的城市.我非常希望听到您对如何以正确的方式编写它而不重复代码的意见.这是我的SetAddress代码:

bool Address::SetAddress(const char* city, const char* street, const int buildingNumber, const int apartmentNumber)
{
    if (SetCity(city) == false || SetStreet(street) == false || SetBuildingNumber(buildingNumber) == false || SetApartmentNumber(apartmentNumber) == false)
        return false;
    return true;
}
Run Code Online (Sandbox Code Playgroud)

这是我的SetCity:

bool Address::SetCity(const char* city)
{
    if(city == NULL)
        return false;
    delete[] m_city;
    m_city = new char[strlen(city)+1];
    strcpy(m_city, city);
    return true;
}
Run Code Online (Sandbox Code Playgroud)

还有一个问题,如果我更改char*到字符串我怎么能检查字符串城市是否不等于NULL,因为我知道字符串没有"=="运算符而字符串是一个对象,不能等于null,我怎么能检查我得到的字符串是否确实是legeal.

Jam*_*lis 15

你应该使用std::string而不是C strings(const char*).然后您不必担心具有"删除"功能,因为std::string它将为您管理内存.