默认构造函数的作用

// 首先定义一个No_default类。

class  No_default

{

public:

No_default (const string&);  // 声明了一个构造函数,但是却没有默认构造函数!

private:

int a;

string b;

};

// 定义第二个类,其中有一个No_default类型的成员。

class  B

{

public:

No_default   my_mem;   // 类B也没有构造函数!

};

B  b;                                   //  试图定义一个B类型的对象错误的,因为不能为B合成默认构造函数,因为其中有No_default(没有默认构造函数)类型的成员!

class C

{

public:

C ()  {}                            //  试图定义C的默认构造函数是错误的,因为No-default类的成员c_mem没有初始值!

private:

No_default  c_mem;

};

class D

{

public:

D (): d_mem(0)  {}                            // 定义了正确的默认构造函数,成员都有初始值(显示地给d_mem初始化为0)!

private:

No_default  d_mem;

};

注意: 在类中如果定义了其他构造函数,最好也提供一个默认构造函数!

时间: 2024-12-28 00:53:53

默认构造函数的作用的相关文章

【C++ Primer 第七章】 默认构造函数的作用

默认构造函数的作用 1.  默认构造函数 C++ 默认构造函数是对类中的参数提供默认值的构造函数,一般情况下,是一个没有参数值的空函数,也可以提供一些的默认值的构造函数,如果用户没有定义构造函数,那么编译器会给类提供一个默认的构造函数,但是只要用户自定义了任意一个构造函数,那么编译器就不会提供默认的构造函数,这种情况下,容易编译报错,所以正确的写法就是用户在定义构造函数的时候,也需要添加一个默认的构造函数,这样就不会造成编译报错. 如:用户自定义的默认构造函数 class Test { publ

求二叉树的深度和宽度 ----我对默认构造函数的理解

////计算二叉树的深度和宽度:深度:层数   宽度:各层最大节点数 ///关于二叉树问题,一般都要用到递归的方法. ////算法:首先构造二叉树节点的结构:要创建二叉树,创建的过程,使用递归算法:其次,计算二叉树深度,也要递归:最难的一点是计算求出层次中的最大节点数,使用队列的方法 #include <iostream>#include <queue>#include <tchar.h>using namespace std;struct BTNode{ char m

【C/C++】构造函数、默认构造函数、成员初始化列表

常见问题 Q1. 下列关于构造函数的描述中,错误的是( ) A. 构造函数可以设置默认的参数 B. 构造函数在定义类对象时自动执行 C. 构造函数可以是内联函数 D. 构造函数不可以重载 Q2. 下列代码中a.b的各个成员变量值是多少? 1 class Student 2 { 3 public: 4 Student() {} 5 void show(); 6 private: 7 string name; 8 int number; 9 int score; 10 }; 11 Student a

c++构造函数的作用---13

原创博客:转载请标明出处:http://www.cnblogs.com/zxouxuewei/ 一. 构造函数是干什么的 class Counter { public: // 类Counter的构造函数 // 特点:以类名作为函数名,无返回类型 Counter() { m_value = 0; } private: // 数据成员 int m_value; } 该类对象被创建时,编译系统对象分配内存空间,并自动调用该构造函数->由构造函数完成成员的初始化工作 eg:    Counter c1;

C++对象模型之默认构造函数的构造操作

一个类,如果没有任何的用户声明的的构造函数,那么会有一个默认的构造函数被隐式地声明出来.这个被隐式声明的构造函数,究竟什么时候被合成.被编译器合成的默认构造函数究竟执行怎么样的操作,编译器如何处理用户定义的构造函数,就是本文要探讨的问题. 1.默认构造函数何时被合成 如果一个类没有任何的用户声明的构造函数,那么在当编译器需要的时候,编译器会为类合成一个默认的构造函数,它只用于执行编译器所需要的操作.注意,默认的构造函数是在编译器需要的时候被合成出来,而不是程序需要的时候,如果程序需要,则默认的构

C++的允诺 ---- 默认构造函数 真的如你所愿吗

首先,本篇文章只讲 "默认构造函数",即如你所知,默认构造函数是不带参数的构造函数. 编译器会在 适当的时候 为class合成一个默认构造函数 ~~ 先问以下两个问题: 编译器会为任何没有声明构造函数的class,合成默认构造函数?? 错!!! 合成的默认构造函数会显示设定class内的每一个data member的默认值?? 错!!! class Base { public: int x; int getX() const {return x;}; }; int main() { B

C#中构造函数的作用

C#中构造函数的作用 共同点: 都是实例化对象,初始化数据的 默认构造是说所有的类都从祖先object那继承了空参的构造方法,你不写与写空参构造都存在,而有参数的构造一般是自己写的,写就有不写就没有,它的作用和空参的一样,只是它里面可以有参数,给你个例子来说明吧 有一个类Monitor它有属性String height;String width public Monitor(){} public Monitor(String height,String width){} 有一个空参的一个有参的构

C++默认构造函数的一点说明

大多数C++书籍都说在我们没有自己定义构造函数的时候,编译器会自动生成 默认构造函数.其实这句话我一直也是深信不疑.但是最近看了一些资料让我 有了一点新的认识. 其实我觉得大多数C++书籍之所以这样描述其实是玩了文字游戏的.如果说编译器 自动产生的默认构造函数对于我们的类没有任何作用,也就是说在编译器默认生成 的这个构造函数里根本没有任何实质性的代码工作,那么这种默认构造其实是可有 可无的,所以不妨说编译器其实是为每个类生成了默认构造函数的. 在深度探索C++对象模型中讲了四种关于编译器自动生成

编译器生成默认构造函数的情况

在类没有显示声明构造函数的情况下,编译器并不总是为我们自动生成默认构造函数,以下4种情况,编译器才会为我们自动生成默认构造函数: 1.类中有一个类成员含有默认构造函数的,编译器会为该类自动生成默认构造函数,自动插入代码,调用该成员的构造函数: 2.基类中含有默认构造函数,编译器会为该类自动生成默认构造函数,自动插入代码,调用基类的构造函数: 3.类中含有虚函数时,由于编译器要为该类生成虚函数表vtable,并为该类的对象生成指向该vtable的vptr,所以需要为该类合成默认构造函数: 4.虚继