练习7.43
网上的答案
1 #include <iostream> 2 using std::cout; 3 using std::endl; 4 5 class Nodefault 6 { 7 public: 8 Nodefault(int i) 9 { 10 val = i; 11 } 12 int val; 13 }; 14 15 class C 16 { 17 public: 18 Nodefault nd; 19 C(int i = 0) : nd(i) { } 20 }; 21 22 int main() 23 { 24 C c; 25 cout<<c.nd.val<<endl; 26 return 0; 27 }
但是觉得不对,对于这样的构造方法不是c的默认构造函数,只是c的构造函数。个人认为缺少NoDefault的默认构造函数的情况下,无法构造c的默认构造函数;
练习7.44
不合法,因为NoDefault类并没有他的默认构造函数,这样的定义最后得到的将是未定义的。
练习7.45
如果C能够构造出默认构造函数,则合法,反之亦然。(但是我觉得c的默认构造函数无法构造)
练习7.46
a错误,因为如果类不提供任何一个构造函数,编译器在其需要时会提供一个合成的默认构造函数;
b错误,如果构造函数为所有参数都提供了默认实参,则他实际上也定义了默认构造函数;
c错误,默认构造函数在理论上来说是必须的;
d错误,如果类包含内置类型或复合类型的成员,则该类不应该依赖于合成的默认构造函数。
时间: 2024-11-03 05:30:43