向构造函数传递参数的方式

问题描述 投票:0回答:1

我的问题在第72行。为什么我们可以在第81行执行相同的操作而不会出现任何错误?如果我们声明一个需要将参数传递给其类构造函数的对象,是否应该执行任何首选项?

#include<iostream>
using namespace std;
class clsPerson 
{
    string _FullName;
    class clsAddress
    {
    private:
        string _AddressLine1;
        string _AddressLine2;
        string _City;
        string _Country;
    public:
        clsAddress(string AddressLine1, string AddressLine2, string City, string Country)
        {
            _AddressLine1 = AddressLine1;
            _AddressLine2 = AddressLine2;
            _City = City;
            _Country = Country;
        }
        string setAddressLine1(string AddressLine1)
        {
            _AddressLine1 = AddressLine1;
        }
        string AddressLine1()
        {
            return _AddressLine1;
        }
        string setAddressLine2(string AddressLine2)
        {
            _AddressLine2 = AddressLine2;
        }
        string AddressLine2()
        {
            return _AddressLine2;
        }
        string setCity(string City)
        {
            _City = City;
        }
        string City()
        {
            return _City;
        }
        string setCountry(string Country)
        {
            _Country = Country;
        }
        string Country()
        {
            return _Country;
        }
        void Print()
        {
            cout << "\nAddress:\n";
            cout << _AddressLine1 << endl;
            cout << _AddressLine2 << endl;
            cout << _City << endl;
            cout << _Country << endl;
        }
    };
public:
    string setFullName(string FullName)
    {
        _FullName = FullName;
    }
    string FullName()
    {
        return _FullName;
    }
    clsAddress Address = clsAddress("", "", "", "");
    // why i can't replace line 71 with => clsAddress Address ("", "", "", "");
    clsPerson(string FullName, string AddressLine1, string AddressLine2, string City, string Country)
    {
        _FullName = FullName;
        Address = clsAddress(AddressLine1, AddressLine2, City, Country); 
    }
};
int main()
{
    clsPerson Person1 ("Mohammed Abu-Hadhoud", "Building 10", "Queen Rania Street", "Amman", "Jordan");
    clsPerson Person1 = clsPerson ("Mohammed Abu-Hadhoud", "Building 10", "Queen Rania Street", "Amman", "Jordan");
    Person1.Address.Print();
    return 0;
}

我尝试了两种方法,它们在类外都是正确的,但如果我在类内声明一个对象,编译器只接受一种方法。

c++ class constructor
1个回答
0
投票

您不能在声明中直接使用 括号 来初始化类成员,但可以使用 花括号 来代替:

class clsPerson 
{
    ...
    clsAddress Address {"", "", "", ""};
    ...
};

我建议给

clsAddress
一个默认构造函数,并让编译器为您将
std::string
成员初始化为空字符串:

class clsAddress
{
...
public:
    clsAddress() = default;
    ...
};

class clsPerson 
{
    ...
    clsAddress Address;
    ...
};

此外,您的代码中还有一些关于缺少

return
语句的警告。你的 setter 都不应该声明返回类型,请使用
void
代替,例如:

void setAddressLine1(string AddressLine1)
{
    _AddressLine1 = AddressLine1;
}

// etc ...
© www.soinside.com 2019 - 2024. All rights reserved.