构造器与析构器

Posted tianqizhi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了构造器与析构器相关的知识,希望对你有一定的参考价值。

 回顾:之前我们讨论了使用面向对象的编程技术开发程序最基本步骤:

  1. 定义一个有属性和方法的类(模板)
  2. 为该类创建一个变量(实现)

  这是OOP技术的基础,现在逐步向大家介绍一些更复杂和更有用的概念。
  首先是构浩器,它是类里的一种特殊的方法。

 

定义构浩器
  构造器和通常方法的主要区别:
    (1)构浩器的名字必须和它所在的类的名字一样
    (2)系统在创建某个类的实例时会第一时间自动调用这个类的构造器
    (3)构浩器永远不会返回任何值
  创建构浩器,需要先把它的声明添加到类里:

class Car{
    Car( void );
}

  注意大小写与类名保持一致。在结束声明之后开始定义构造器本身:

Car:Car(void//不用写void Car::Car(void)
{
    color="WHITE";
    engine="V8";
    wheel=4;
    gas_tank=FULL_GAS;
}

   好,到这里我们就可以自己着手对之前打造的那辆跑车代码进行“改装"了吧?car.cpp

技术分享图片
#include <iostream>
#include <windows.h>

#define FULL_GAS 85

class Car
{
public:    
    std::string  color;
    std::string  engine;
    unsigned int  gas_tank;
    unsigned int  wheel;
    
    Car(void);
    void setColor(std::string col);    
    void setEngine(std::string eng);
    void setWheel(unsigned int whe);
    void fillTank(int  liter); 
    int running(void);
    void warning(void); 
}; 

Car::Car(void)
{
    color = "While";
    engine = "V8";
    wheel = 4;
    gas_tank = FULL_GAS;
}

void Car::setColor(std::string col)
{
    color = col;
}

void Car::setEngine(std::string eng)
{
    engine = eng;    
}

void Car::setWheel(unsigned int whe)
{
    wheel = whe;
}

void Car::fillTank(int  liter)
{
    gas_tank += liter;
}

int Car::running(void)
{
    char i;
    
    std::cout << "我正在以120的时速往前移动。。。越过那高山越过那河。。。
";
    gas_tank--;
    std::cout << "当前还剩 " << 100*gas_tank/FULL_GAS << "%" << "油量!
";    
     
    if( gas_tank < 10 )
    {
        std::cout << "请问是否需要加满油再行驶?(Y/N)
";
        std::cin >> i;
        if( Y == i || y == i )
        {
            fillTank(FULL_GAS);
        }
        
        if( 0 == gas_tank )
        {
            std::cout << "抛锚中。。。。。。";
            return 1;
        } 
    }
        
    return 0;    
}

void Car::warning(void) 
{
    std::cout << "WARNING!!" << "还剩 " << 100*gas_tank/FULL_GAS << "%" << "油量!";    
}
 
int main()
{
    Car mycar;

    while( !mycar.running() )
    {
        ;    
    }
    
    return 0;
}
View Code

  构造对象数组:之前我们已经说过,数组可以是任何一种数据类型,当然也包括对象。
  如:Car mycar[10];

  调用语法依旧是:mycar[x].running;    注:x代表着给定数组元素的下标。

  好了,自己造十几辆法拉利“自慰下”。









以上是关于构造器与析构器的主要内容,如果未能解决你的问题,请参考以下文章

继承机制中的构造器和析构器

构造函数与析构函数

构造函数与析构函数

Swift-析构过程(Deinitialization)(十三)

单一继承多次与多重继承的构造与析构

构造函数与析构函数2