c++ - 如何在另一个类中创建一个类的参数化构造函数作为数据成员?

标签 c++ c++11 constructor default-constructor


在下面的例子中,

class Car
{
        private:
                int sides;

        public:
                Car()
                {
                        cout<<"\ndefault called constructor";
                }
                Car(int nsides)
                {
                        cout<<"\ncalled constructor";
                        sides=nsides;
                }

};

class Auto
{
        private:
                Car ch;
        public:
        Auto(int a) : Car(a)
        {

                //Car test(5);
        }
};

int main()
{
        Auto at(5);
        return 0;

}

引用以下链接后:-

create objects in object passing variables through constructor

http://www.cplusplus.com/forum/beginner/9746/

我尝试编写相同的代码并执行它。不幸的是,我遇到了以下编译器错误:-

check.cpp: In constructor ‘Auto::Auto(int)’:
check.cpp:44: error: type ‘Car’ is not a direct base of ‘Auto’

如果给定链接中提到的解决方案是正确的,那么我的代码有什么问题?我的下一个问题是......如果尝试在不使用初始化列表的情况下对其进行初始化,为什么只有参数化的构造函数()会抛出编译器。
这将引发编译器错误:-

class Auto
{
        private:
                Car ch(5);
        public:
        Auto(int a)
        {

        }
};

但这不是:-

class Auto
{
        private:
                Car ch;
        public:
        Auto(int a)
        {

        }
};

请帮助我理解这种行为。
提前致谢。

最佳答案

在您的示例中,您通过构造函数 Auto(int a) : Car(a) 指定 Auto 派生自 Car,这就是编译器所提示的。

要初始化您的 Car 对象(在 Auto 内部),请执行此操作 Auto(int a) : ch(a)。您输入的是类型而不是成员的姓名。

关于你的第二个问题,类内成员初始化是C++11带来的新特性。您可以通过将参数 -std=c++11 添加到您的编译器(GCC 或 Clang,msvc 不支持它)来使用它。参见 this question .在你的情况下,你可以像克里斯指出的那样使用它:

class Auto {
// ...
Car ch{5};
int someVal = 5;
// ...
};

关于c++ - 如何在另一个类中创建一个类的参数化构造函数作为数据成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17242202/

相关文章:

c++ - 附加 Char 改变其大小后的字符串

c++ - 如何将 gdb 用于多线程网络程序

c++ - 返回 std::array 未知大小

c++ - 在 C++ 中为没有默认构造函数的成员复制构造函数

spring - Spring配置类中是否可以进行构造函数注入(inject)?

c++ - 如何将持续时间添加到time_point?

c# - 使用 MsiGetProductInfo 检查是否安装了 Microsoft Word

c++ - 在没有正则表达式的情况下选择特定的字符串模式

c++ - 使用类型转换创建对 unique_ptr 中对象的引用

c++ - 使用派生类构造函数初始化对象