读书人

求讲授对象数组 传参构造函数 的实现

发布时间: 2013-06-25 23:45:41 作者: rapoo

求讲解,对象数组 传参构造函数 的实现方式。。若附简短代码则不甚感激。
大牛们好!
请问 如果我是要 在类里面 动态创建另一个类的对象数组,该怎么写构造函数?

貌似不能 批量构造啊, new Gene[5](N);这种形式电脑不忍认啊。。。

ToT...我是刚开始模仿C++,是新手,求大牛指导。。。求讲授,对象数组 传参构造函数 的实现方式。若附简短代码则不甚感激 C++ 对象 构造 动态创建 传参
[解决办法]
可以使用 c++11 里面的 list initialization,像这样。


#include <iostream>

struct test_t
{
test_t () { std::cout << 0 << std::endl; }
test_t (int) { std::cout << 1 << std::endl; }
test_t (double) { std::cout << 2 << std::endl; }
test_t (char) { std::cout << 3 << std::endl; }
test_t (size_t) { std::cout << 4 << std::endl; }
};

int main ()
{
delete [] new test_t [5] {{},1,2.0,'3',size_t(4)};
}

输出应该是 0 1 2 3 4,可以看到会调用最匹配的构造函数,并且对象都是直接构造的。
[解决办法]
数组确实不能这样

一定在构造的时候,确定对象的状态? 如果,为了效率的话,可以参考下placement new 的用法。
[解决办法]
引用:
Quote: 引用:

可以使用 c++11 里面的 list initialization,像这样。

#include <iostream>

struct test_t
{
test_t () { std::cout << 0 << std::endl; }
test_t (int) { std::cout << 1 << std::endl; }
test_t (double) { std::cout << 2 << std::endl; }
test_t (char) { std::cout << 3 << std::endl; }
test_t (size_t) { std::cout << 4 << std::endl; }
};

int main ()
{
delete [] new test_t [5] {{},1,2.0,'3',size_t(4)};
}

输出应该是 0 1 2 3 4,可以看到会调用最匹配的构造函数,并且对象都是直接构造的。


引用:
可以使用 c++11 里面的 list initialization,像这样。

#include <iostream>

struct test_t
{
test_t () { std::cout << 0 << std::endl; }
test_t (int) { std::cout << 1 << std::endl; }
test_t (double) { std::cout << 2 << std::endl; }


test_t (char) { std::cout << 3 << std::endl; }
test_t (size_t) { std::cout << 4 << std::endl; }
};

int main ()
{
delete [] new test_t [5] {{},1,2.0,'3',size_t(4)};
}


输出应该是 0 1 2 3 4,可以看到会调用最匹配的构造函数,并且对象都是直接构造的。
学习了!不过这样看来c++11之前是做不到的?

不行,编译器不支持 list initialization 的话,new [] 后面的 { 会识别为语法错误,这种情况下,可以考虑用 #3 的 workaround.

读书人网 >C++

热点推荐