【ThinkingInC++】33、构造函数和析构函数的各种特征

/**
* 书本:【ThinkingInC++】
* 功能:构造函数和析构函数的各种特征
* 时间:2014年8月26日08:50:52
* 作者:cutter_point
*/

/*
构造函数和析构函数是没有返回值的。
析构函数:当对象超出他的作用域的时候,编译器将自动调用析构函数,但析构函数调用的
唯一证据是包含该对象的右括号,而且即使使用goto语句跳转析构函数任然被调用
*/

#include<iostream>

using namespace std;

class Tree
{
    int height; //私有成员,这棵树的高度
public:
    Tree(int initialHeight);    //析构函数给数的高度赋初值
    ~Tree();        //析构函数,会被自动调用
    void grow(int years);    //树的高度增加
    void printsize();       //输出树的高尺寸
};

//Tree(int initialHeight);    //析构函数给数的高度赋初值
Tree::Tree(int initialHeight)
{
    height=initialHeight;
}

//~Tree();        //析构函数,会被自动调用
Tree::~Tree()
{
    cout<<"inside Tree destructor"<<endl;
    void printsize();       //输出树的高尺寸
}

//void grow(int years);    //树的高度增加
void Tree::grow(int years)
{
    height+=years;  //每年增加一
}

//void printsize();       //输出树的高尺寸
void Tree::printsize()
{
    cout<<"Tree height is"<<height<<endl;
}

int main()
{
    cout<<"before opening brace"<<endl;
    {
        Tree t(12);
        cout<<"after Tree creation"<<endl;
        t.printsize();
        t.grow(4);
        cout<<"before closing brace"<<endl;
    }
    cout<<"after closing brace"<<endl;

    return 0;
}

时间: 2024-10-30 23:08:08

【ThinkingInC++】33、构造函数和析构函数的各种特征的相关文章

【ThinkingInC++】53、构造函数,析构函数,全局变量

/** * 书本:[ThinkingInC++] * 功能:构造函数,析构函数,全局变量 * 时间:2014年9月17日18:07:43 * 作者:cutter_point */ #include <fstream> using namespace std; ofstream out("statdest.txt"); class Obj { char c; public: Obj(char cc) : c(cc) {out<<"Obj::Obj() f

【ThinkingInC++】34、带有构造函数和析构函数的Stack

头文件 /** * 书本:[ThinkingInC++] * 功能:带有构造函数和析构函数的Stack * 时间:2014年8月27日11:13:10 * 作者:cutter_point */ #ifndef STACK3_H_INCLUDED #define STACK3_H_INCLUDED class Stack { struct Link { void* data; Link* next; Link(void* dat, Link* nxt); ~Link(); }*head; publ

你好,C++(33)对象生死两茫茫 6.2.3 一个对象的生与死:构造函数和析构函数

6.2.2  使用类创建对象 完成某个类的声明并且定义其成员函数之后,这个类就可以使用了.一个定义完成的类就相当于一种新的数据类型,我们可以用它来定义变量,也就是创建这个类所描述的对象,表示现实世界中的各种实体.比如前面完成了Teacher类的声明和定义,就可以用它来创建一个Teacher类的对象,用它来表示某一位具体的老师.创建类的对象的方式跟定义变量的方式相似,只需要将定义完成的类当作某种数据类型,用之前我们定义变量的方式来定义对象,而定义得到的变量就是这个类的对象.其语法格式如下: 类名

构造函数和析构函数中得异常处理

一. 构造函数 总结如下: 1. 构造函数中抛出异常,会导致析构函数不能被调用,但对象本身已申请到的内存资源会被系统释放(已申请到资源的内部成员变量会被系统依次逆序调用其析构函数). 2. 因为析构函数不能被调用,所以可能会造成内存泄露或系统资源未被释放. 3. 构造函数中可以抛出异常,但必须保证在构造函数抛出异常之前,把系统资源释放掉,防止内存泄露.(如何保证???使用auto_ptr???) 试验代码: 1 //ExceptionConstructor.h 2 #pragma once 3

C++C++中构造函数与析构函数的调用顺序

http://blog.csdn.net/xw13106209/article/details/6899370 1.参考文献 参考1: C++继承中构造函数.析构函数调用顺序及虚函数的动态绑定 参考2: 构造函数.拷贝构造函数和析构函数的的调用时刻及调用顺序 参考3: C++构造函数与析构函数的调用顺序 2.构造函数.析构函数与拷贝构造函数介绍 2.1构造函数 构造函数不能有返回值 缺省构造函数时,系统将自动调用该缺省构造函数初始化对象,缺省构造函数会将所有数据成员都初始化为零或空 创建一个对象

构造函数、析构函数、虚析构函数、纯虚析构函数要点总结

1.派生类的构造函数.析构函数默认会调用基类的构造函数.析构函数. 顺序:基类构造.派生类构造:派生类析构,基类析构. 举例: 1 /****************************************************************************************************** 2 * File:Constructor&DestructorTest 3 * Introduction:测试构造函数.析构函数.虚构造函数与纯虚构造函数的一些

C++构造函数和析构函数执行顺序

四种情况:1. 创建一个类指针时,调用其构造函数:删除当前指针时,自动调用其析构函数.2. 创建子类对象指针时,首先调用其父类的构造函数,然后调用子类的构造函数:删除当前指针时先调用子类的析构函数,然后调用父类的析构函数.3. 一个父类指针指向子类地址时,创建指针时先调用父类的构造函数,然后调用子类的构造函数;删除当前指针时,只调用父类的析构函数.4. 在第三种情况中,为了在删除指针时,也调用子类的析构函数,则需要将父类的析构函数声明为抽象的. 给出具体的代码实践结果: 1 #include <

【C/C++】构造函数与析构函数的调用顺序

常见问题 Q1. 以下代码的输出结果是什么? 1 #include <iostream> 2 using namespace std; 3 4 class A 5 { 6 public: 7 A() { cout << "A" << endl; } 8 ~A() { cout << "~A" << endl; } 9 }; 10 class B : public A 11 { 12 public: 13 B

初学C++-----------------类的构造函数、析构函数

1.构造函数 特征: 1)与类名同名. 2)无函数返回类型说明. 3)主要是完成对象的初始化. 4)当一个新的对象被建立时(a.在对象的说明语句中 b.用new函数新建一个动态对象时),系统自动调用其相应的构造函数. 5)可有多个构造函数(重载):多个构造函数的函数名相同,但是其形参在数据类型或数量上有差异,系统会根据参数的性质和个数来选择合适的构造函数. 6)构造函数一定是公有函数. 7)构造函数的执行是在系统创建对象时自动执行的. 定义构造函数的一般形式为: class 类名 { publi