C++笔记----构造函数与析构函数(二)

构造函数是一种特殊的成员函数。在创建对象的时候自动调用,对对象的数据成员进行初始化。

(1)栈区中创建的对象,在生存期结束的时候会自动调用析构函数。

(2) 在堆上创建的对象,要由程序员显示调用delete释放该对象,同时调用析构造函数。

(3)全局对象的构造先于main函数。全局对象在其生存期结束的时候也会自动调用析构造函数,对对象进行释放。

构造函数的作用:初始化、类型转化(转换构造函数)

1、转换构造函数

定义:转换构造函数是单个参数的构造函数

作用:将其他类型转换成类类型

类的构造函数只有一个参数是非常危险的,因为编译器可以使用这种构造函数把参数的类型隐式转换为类类型

带一个参数的构造函数有:

普通构造函数

转换构造函数(初始化、类型转化)

2、赋值与初始化区别

在初始化语句中的等号不是运算符。编译器对这种表示方法有特殊的解释

赋值    Test& Test::operator=(const Test& other);

3.explicit

只提供给类的构造函数使用的关键字

编译器不会把声明为explicit的构造函数用于隐式转换,它只能在程序代码中显示创建对象

时间: 2024-08-09 02:21:04

C++笔记----构造函数与析构函数(二)的相关文章

C++笔记----构造函数与析构函数(三)

1.构造函数初始化列表 推荐在构造函数初始化列表中进行初始化 构造函数的执行分为两个阶段:初始化段. 普通计算段 2.对象成员及其初始化 1 #include<iostream> 2 using namespace std; 3 4 class Object 5 { 6 public: 7 Object(int num) :num_(num) 8 { 9 cout << "Object..." <<num_<<"..."

c++学习笔记5,多重继承中派生类的构造函数与析构函数的调用顺序(二)

现在来测试一下在多重继承,虚继承,MI继承中虚继承中构造函数的调用情况. 先来测试一些普通的多重继承.其实这个是显而易见的. 测试代码: //测试多重继承中派生类的构造函数的调用顺序何时调用 //Fedora20 gcc version=4.8.2 #include <iostream> using namespace std; class base { public: base() { cout<<"base created!"<<endl; }

C++ Primer 学习笔记_18_类与数据抽象(4)_构造函数、析构函数、explicit关键字、赋值与初始化、类成员的显式初始化

引言: 构造函数确保每个对象在创建时自动调用,以确保每个对象的数据成员都有合适的初始值. 一.构造函数.默认构造函数 1.构造函数 --构造函数是特殊的成员函数 --构造函数是为了保证对象的每个数据成员都被正确初始化 --函数名和类名完全相同 --不能定义构造函数的类型(返回类型),也不能使用void --通常情况下构造函数应声明为公有函数,一般被隐式地调用. --构造函数被声明为私有有特殊的用途,比如单例模式. (1).构造函数可以被重载 一般而言,不同的构造函数允许用户指定不同的方式来初始化

《C++ Primer Plus》10.3 类的构造函数和析构函数 学习笔记

10.3.1 声明和定义构造函数构造函数原型:// constructor prototype with some default argumentsStock(const string &co, long n = 0, double pr = 0.0);构造函数定义:// constructor definitionStock::Stock(const string & co, long n, double pr){    company = co;    if (n < 0)  

C++(二十六) — 构造函数、析构函数、对象数组

1.构造函数 (1)每个类都要定义它自己的构造函数和析构函数,是类的成员函数. 特点:名称与类名相同:没有返回值:一定是共有函数,可以直接访问类内所有成员函数:可以带默认形参,可以重载: class clock { public: // 无参构造函数 clock() { cout << "无参构造函数" << endl; } // 有参构造函数 clock(int h, int m , int s) { hour = h; minute = m; second

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

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

对C++中派生类的构造函数和析构函数的认识

一:构造函数 形式:派生类名::派生类名:基类名1(参数1),基类名2(参数2),--基类名n(参数n),数据成员1(参数1),数据成员2(参数2),--数据成员n(参数n){ 各种操作的说明 } 执行过程:先执行基类的构造函数,再进行数据成员的赋值,最后执行函数体. 其中基类名和数据成员的顺序是由在派生类的定义中声明的顺序决定执行的顺序的,因此它们的顺序是任意的,但为了可读性,还是最好按顺序写. 如果基类只有默认构造函数,则基类名和参数表可以不用写出来. 二:复制构造函数 派生类的构造函数的形

C++之保护和私有构造函数与析构函数

一.构造函数 1.保护 构造函数定义为protected后,就意味着你不能在类的外部构造对象了,而只能在外部构造该类的子类的对象,比如: class Base { protected: Base() {} ... }; class Derived : public Base { public: Derived() {} ... }; Base b; //error Derived d; //ok 2.私有 构造函数定义为private后,意味着不仅仅不能在类的外部构造对象了,而且也不能在外部构造

构造函数和析构函数的作用[转]

千万不要把构造函数和析构函数同普通的函数等同起来看待. 给你一段介绍,这个是一位真正的高手的回答,看了你就会明白的.第9章         类的构造函数.析构函数与赋值函数构造函数.析构函数与赋值函数是每个类最基本的函数.它们太普通以致让人容易麻痹大意,其实这些貌似简单的函数就象没有顶盖的下水道那样危险.         每个类只有一个析构函数和一个赋值函数,但可以有多个构造函数(包含一个拷贝构造函数,其它的称为普通构造函数).对于任意一个类A,如果不想编写上述函数,C++编译器将自动为A产生四