构造和析构!

一般而言,所有的对象都需要一个确定的初始状态!

C++中的类可以定义与类名相同的特殊成员函数,这种类名相同的成员函数叫做构造函数,构造函数在定义时可以有参数,但是没有任何返回类型的声明(和返回void是两个概念)

构造函数的调用:一般情况下C++编译器自动调用构造函数

#include <iostream>

using namespace std;

class Test
{
private:
    int i,j,k;
public:
    Test(int v)
    {
        i = j = k = v;
    }
    void print()
    {
        printf("i = %d,j = %d,k = %d\n",i,j,k);
    }
};
int main()
{
    Test t1(4);//自动调用构造函数
    Test t2 = 5;//自动调用构造函数
    Test t3 = Test(6);//主动调用构造函数

    t1.print();
    t2.print();
    t3.print();

    Test tA[3] = {Test(1),Test(2),Test(3)};//主动调用构造函数
    for(int i=0;i<3;i++)
    {
        tA[i].print();
    }
    return 0;
}

两个特殊的构造函数:拷贝构造函数和默认构造函数

无参构造函数:当类中没有定义任何一个构造函数,C++编译器会为我们提供无参构造函数和拷贝构造函数。默认构造函数为空什么都不做

拷贝构造函数:当类中定义了任意的非拷贝构造函数是,C++编译器就不会提供无参构造函数了,会为我们提供拷贝构造函数。默认拷贝构造函数会对成员变量一 一复制。

#include <iostream>

using namespace std;

class Test
{
private:

public:
    Test(const Test& v)//拷贝构造函数
    {
        printf("Test(const Test& v)\n");
    }
    Test()//默认构造函数
    {
        printf("Test()\n");
    }
};
int main()
{
    Test t1;
    Test t2 = t1;
    return 0;
}

时间: 2024-10-26 04:40:23

构造和析构!的相关文章

C++ 类的继承三(继承中的构造与析构)

//继承中的构造与析构 #include<iostream> using namespace std; /* 继承中的构造析构调用原则 1.子类对象在创建时会首先调用父类的构造函数 2.父类构造函数执行结束后,执行子类的构造函数 3.当父类的构造函数有参数时,需要在子类的初始化列表中显示调用 4.析构函数调用的先后顺序与构造函数相反 继承与其他类做成员变量混搭的情况下,构造和析构嗲用原则 1.先构造父类,在构造成员变量,最后构造自己 2.先析构自己,再析构成员变量,最后析构父类 */ clas

再探Delphi2010 Class的构造和析构顺序

发了上一篇博客.盒子上有朋友认为Class的构造和析构延迟加载.是在Unit的初始化后调用的Class的构造.在Unit的反初始化前调用的Class的析构函数. 为了证明一下我又做了个试验 unit Unit2; interface Type  TClassTest = class    class constructor create();    class destructor destory();  end; implementationuses  Windows; { TClassTes

C++我们必须要了解的事之具体做法(1)——构造、复制构造、析构、赋值操作符背后的故事

1. C++默认调用哪些函数 当类中的数据成员类型是trival数据类型(就是原c语言的struct类型)时,编译器默认不会创建ctor. copy ctor.assign operator.dctor. 只有在这些函数被调用时,编译器才会创建他们. 这时候我们要自己创建构造函数,初始化内置数据类型.一般我们不需要复制控制函数,当需要时编译器合成的就很好.一般编译器合成的复制控制函数只是简单的复制成员,若能满足要求就不需要自己写. 当类中含有引用.const成员时,必须在初始化列表中初始化成员.

Python Class __init__ __del__ 构造,析构过程解析【转】

转载自: http://blog.csdn.net/bbdxf/article/details/25774763 最近学习<Python参考手册>即<Learning Python>学到Class部分,遇到了类的构造析构部分的问题: 1.什么时候构造? 2.什么时候析构? 3.成员变量如何处理? 4.Python中的共享成员函数如何访问? ------------------------ 探索过程: 1.经过查找,Python中没有专用的构造和析构函数,但是一般可以在__init_

【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);

Effective C++ 条款九、十 绝不在构造和析构过程中调用virtual函数|令operator=返回一个reference to *this

  1.当在一个子类当中调用构造函数,其父类构造函数肯定先被调用.如果此时父类构造函数中有一个virtual函数,子类当中也有,肯定执行父类当中的virtual函数,而此时子类当中的成员变量并未被初始化,所以无法调用子类与之对应的函数.即为指向虚函数表的指针vptr没被初始化又怎么去调用派生类的virtual函数呢?析构函数也相同,派生类先于基类被析构,又如何去找派生类相应的虚函数? 2.做法:将子类的某个函数改为non-virtual,然后在子类构造函数中传递参数给父类函数.然后父类的构造函数

第46课 继承中的构造与析构

1. 子类对象的构造 (1)子类中可以定义构造函数 (2)子类构造函数,必须对继承而来的成员进行初始化,有两种方式 ①直接通过初始化列表进行初始化或赋值的方式进行初始化 ②调用父类构造函数进行初始化 (3)父类构造函数在子类中调用方式 ①默认调用:适用于无参构造函数和使用默认参数的构造函数 ②显式调用:通过初始化列表进行调用,适用于所有父类构造函数 [编程实验]子类的构造初探 #include <iostream> #include <string> using namespace

Effective C++ Item 9 绝不在构造和析构过程中调用virtual函数

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 经验:在构造和析构期间不要调用virtual函数,因为这类调用从不下降至derived class(比起当前执行构造函数和析构函数的那层) 示例: <pre name="code" class="cpp">#include <iostream> #include <string> using namespace std; c

NO.8:绝不在构造或者析构过程中调用virtual函数

在构造和析构执行期间不要调用virtual函数,因为这类调用从不会下降至derived class(比起当前执行构造函数和析构函数) 如果在base class 构造函数或者析构函数调用virtual,derived class构造时会先构造base class,则base class中的virtual实际调用是base class的; 第一种解释:derived class类先执行构造base class部分,然而在base class构造过程中,derived class部分是为初始化的,如

Php面向对象学习笔记 – 构造、析构、对象赋值、克隆

Php面向对象学习笔记 – 构造.析构.对象赋值.克隆 class student { public  $stu_id;       // 定义成员变量 public  $stu_name; public  function sayName()   // 成员函数 { echo $this->stu_name;   // $this  访问该对象的成员变量 } } $stu = new  Student;      // 创建对象 $stu->stu_id = '0607001'; $stu-