c++-为什么在类中定义没有定义默认构造函数的类类型变量通过编译了?

问题描述

为什么在类中定义没有定义默认构造函数的类类型变量通过编译了?
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

c++-为什么在类中定义没有定义默认构造函数的类类型变量通过编译了?的相关文章

jpg-在MFC的CDialog类中可以显示JPG图片 在CFromview类中用同样的方法显示不了

问题描述 在MFC的CDialog类中可以显示JPG图片 在CFromview类中用同样的方法显示不了 HGLOBAL hMem; IStream *m_pStream; IPicture *m_pPicture; OLE_XSIZE_HIMETRIC m_JPGWidth; OLE_XSIZE_HIMETRIC m_JPGHeight; CRect rect(100,120,600,460); CString path; CFile file; CFileDialog dlg(TRUE,_T(

java代码-java初学者提问 在类中 用static成员变量实例化自身类 程序的执行顺序过程是怎样的?

问题描述 java初学者提问 在类中 用static成员变量实例化自身类 程序的执行顺序过程是怎样的? class Demo03 { public static void main(String[] args) { A.show(); } } class A { //构造方法 A(){ System.out.println("构造方法执行"); System.out.println(b); System.out.println(c); } static A a=new A(); sta

【C/C++学院】0819-/类的成员函数与const-mutable /构造与析构/拷贝构造deletedefault以及深浅拷贝/静态成员函数成员变量类在内存的存储默认参数/友元类以及友元函数

类的成员函数与const-mutable  成员函数 Fushu.h #pragma once #include <iostream> class fushu { public: int x; int y; public: fushu(); ~fushu(); void show(); inline void showall(int x, int y);//显式内联 void setxy(int x, int y);//编译器优化,默认隐式内联 void show(int x, int y);

如何在rest类中获取httpservletrequest对象

问题描述 如何在rest类中获取httpservletrequest对象 如何在rest类中获取httpservletrequest对象,在网上找的大部分都不好用,求高手帮帮忙,谢了 解决方案 看你的rest类怎么定义的,上下文是什么,如果你一窍不通,还是找个略懂程序的学生帮你下.写程序这件事不是word打字,不是网上胡乱找个代码一贴就能好用的.

C++实践参考——分数类中的运算符重载

[项目1-分数类中的运算符重载] (1)实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简).比较(6种关系)的运算. class CFraction { private: int nume; // 分子 int deno; // 分母 public: //构造函数及运算符重载的函数声明 }; //重载函数的实现及用于测试的main()函数 (2)在(1)的基础上,实现分数类中的对象和整型数的四则运算.分数类中的对象可以和整型数进行四则运算,且运算符合交换律.例如:CFra

java-Hibernate实体类中属性的映射

问题描述 Hibernate实体类中属性的映射 我的实体类的其中一个属性的类型是InputStream,映射文件中type要为什么?可以是mediumblob吗? 解决方案 hibernate实体类映射hibernate 无主键的表映射实体类2.Hibernate 实体类映射(两种形式) 解决方案二: 搞什么鬼,实体类的属性类型时InputStream??? 难道不应该是byte[]吗?blob什么的也好--inputStream是一个流,它就不是用来储存数据信息的啊喂 如果有必要保存一个"从某

为什么Array类中的Add(..)方法和Count属性不可见呢?

问题描述 为什么Array类中的Add(..)方法和Count属性不可见呢?.Framework中是如下定义的:classArray:ICollection,IList{......}interfaceICollection{intAdd(..);}interfaceIList:ICollection{intCount{get;}}我查了msdn,发现add()和Count在Array类中是私有的,难道Array类实现ICollection和IList这两个接口的Add(..)方法和Count属

深入分析C++派生类中的保护成员继承_C 语言

protected 与 public 和 private 一样是用来声明成员的访问权限的.由protected声明的成员称为"受保护的成员",或简称"保护成员".从类的用户角度来看,保护成员等价于私有成员.但有一点与私有成员不同,保护成员可以被派生类的成员函数引用. 如果基类声明了私有成员,那么任何派生类都是不能访问它们的,若希望在派生类中能访问它们,应当把它们声明为保护成员.如果在一个类中声明了保护成员,就意味着该类可能要用作基类,在它的派生类中会访问这些成员.

类中数据库访问-求php开发中数据库连接创建和关闭的较好时机问题

问题描述 求php开发中数据库连接创建和关闭的较好时机问题 刚刚学php不久,在用php写一个毕业设计,可是在数据库连接的地方犯了难, 最开始用的是配置文件的方法, 在config.inc.php中设置了数据库连接的一些参数,比如说数据库名密码等等, 然后在db.conn.php中创建一个mysqli对象,连接上数据库,并设置它的编码. 后来在应用的过程中发现特别麻烦,每次都要用include将这些文件导入,然后再使用 $db进行数据库的访问,可是后来在一些类中处理,打算在构造函数中创建数据库连