Constructor with default values & Different Constructors
我想做这样的事
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | class foo{ private: double a,b; public: foo(double a=1, double b=2){ this.a=a; this.b=b; } } int main(){ foo first(a=1); foo first(b=2); } |
这样做是可能的还是需要创建两个新的构造函数?
2号车来了。问题:这两个构造器有什么区别:
1 2 3 4 5 6 7 | class foo{ private: int a; public: foo(int in):a(in){} } |
或
1 2 3 4 5 6 7 | class foo{ private: int a; public: foo(int in){a=in} } |
在C++中,EDCOX1×1指针是一个EDCOX1,2,而不是EDCOX1×3(在Java中,您将使用EDCOX1 4)来访问它。也就是说,您需要一个取消引用的箭头(即
无论如何,这是可以做到的。但是,C++中的参数化工作顺序颠倒,不能命名。例如,
对于第二个问题,本例中的构造函数之间没有显著的区别。有一些微小的(潜在的)速度差异,但在这种情况下,它们很可能是可以忽略的。在第一个列表中,您使用的是初始值设定项列表(如果需要,继承和调用基类的构造函数是必需的),第二个列表只是显式地设置变量的值(即使用operator=)。
1 2 | foo first(a=1); foo first(b=2); |
在C++中你不能真的拥有这个。它曾经被认为是标准化的,但后来却被放弃了。参数尽可能地近似命名参数,请参见http://www.boost.org/doc/libs/1_47_0/libs/parameter/doc/html/index.html
1 2 | foo(int in):a(in){} foo(int in){a=in} |
第一个构造函数正在初始化,而第二个构造函数正在分配给它。对于这个特殊的情况(int),没有什么区别。
对于您的示例来说,它可能是多余的,但您可能希望了解命名参数习惯用法。
C++不支持命名参数,因此:
1 2 3 4 5 | int main() { foo first(a=1); foo first(b=2); } |
是不合法的。您还有多个非唯一的Idenfier(例如