问题描述
- 为什么在类中定义没有定义默认构造函数的类类型变量通过编译了?
-
class T { public: T(int i) :_i(i) {} private: int _i; }; class U { private: T t; };
如果定义了一个构造函数不是就会取消合成的默认构造函数吗?
可以定义不可以赋值是吧?刚才发现
const int ci;
int &ri;
也通过编译了。
解决方案
语法这么规定的,因为t是成员变量
如果你写在函数里
main()
{
T t;
}
那就报错了。
解决方案二:
通过编译是因为你既没有T类的对象也没有U类的对象
你在被调用到的函数里任意写上U u;或T t;
编译就过不去了
解决方案三:
你那是声明一个对象,并没有为他分配内存
解决方案四:
那是因为你到现在为止并没有生成类实例,并没有要调用默认构造函数,当你需要调用它的时候,编译器会自动为你调用
解决方案五:
C++类的定义之构造函数
类的默认构造函数能否定义为私有
莫用类的默认构造函数定义变量
时间: 2024-11-05 08:31:03