构造器与析构器

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

  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的时速往前移动。。。越过那高山越过那河。。。\n";
    gas_tank--;
    std::cout << "当前还剩 " << 100*gas_tank/FULL_GAS << "%" << "油量!\n";    

    if( gas_tank < 10 )
    {
        std::cout << "请问是否需要加满油再行驶?(Y/N)\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;
}

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

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

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

原文地址:https://www.cnblogs.com/tianqizhi/p/10262271.html

时间: 2024-10-27 12:33:59

构造器与析构器的相关文章

c++第五章-(类与对象、构造器和析构器)

1.构造器与结构体的区别:构造器多支持方法.其作用有申请内存,初始化变量. 在c++中构造器没有返回值:语法Class Name(); 2.析构器的作用:释放内存. 在c++中析构器没有返回值:语法~ClassName(); class Animal { public: std::string mouth; std::string name; void eat(); void sleep(); void drool(); Animal(std::string theName); }; class

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

正如此前所讲解的,C++支持程序员自己写出将创建或销毁一个对象时自动调用的方法,也就是构造器和析构器. 在没有继承机制的情况下,我们很容易理解这些方法在创建或销毁一个对象的时候被调用.但是一旦使用了继承机制,构造器和析构器就变得有点复杂了. 比如基类有个构造器,如Animal(),它将在创造Pig 类型的对象时最先被调用,如果Pig类也有一个构造器,它将排在第二个被调用.因为基类必须在类之前初始化原则! 然后我们继续讨论:如果构浩器带着输入参数,事情变得稍微复杂了. class Animal{

构造器和析构器

一 构造器 swift的init方法是没有返回值的,而OC的init方法就有返回值,返回类本身 1.默认构造器 即使我们不写init方法,系统也会为函数默认写一个空的init方法 struct Fahrenheit {          var temperature:Double          init(){         temperature = 32.0     } } var f = Fahrenheit() 2.自定义构造器 struct Celsius {          

Python构造器及析构器:__init__与__new__及__del__

__init__与__new__这两个魔法方法组成了Python类对象的构造器,在Python类实例化时,其实最先调用的不是__init__而是__new__.__new__是负责实例化对象的,而__init__是初始化操作.__del__是析构器,当Python对象的所有引用都不存在了(被del了),就会自动触发__del__执行. class CapStr(str): def __new__(cls, string): #此时string = 'i love you' cls是CapStr这

理解继承中的构造器和析构器

1 #include <iostream> 2 #include <string> 3 4 using namespace std; 5 6 class FatherClass 7 { 8 public: 9 FatherClass(); 10 ~FatherClass(); 11 }; 12 13 FatherClass::FatherClass() 14 { 15 cout << "this is FatherClass constructor"

Swift构造器(Initializer)与析构器(Deinitializer)

为了初始化结构体和类等类型的实例属性. 默认构造器 [html] view plaincopy struct Fahrenheit { var temperature: Doubleinit(){ temperature = 32.0 } } var f = Fahrenheit() //调用默认构造器 init() ,没有参数 没有返回值. [html] view plaincopy println("The default temperature   is \(f.temperature)°

析构器

与构造过程相反,实例最后释放的时候,需要清除一些资源,这个过程就是析构过程,在析构过程需要调用一种特殊的方法deinit,称为析构器,析构器deinit没有返回值,也没有参数,所以不能重载,析构函数只适用于类类型,不能应用于结构体和枚举 类似的方法在C++中称为析构函数,不同的是,C++中的析构函数通常用来释放不再需要的实例资源类型,而在swift中,内存管理采用自动引用计数(ARC),不需要在析构器释放不需要的实例资源,但是还是有一些清除工作需要做,如下实例: class Rectangle{

十四、析构器 Deinitialization

1. 当一个实例被释放(deallocated)时,析构器会立即被调用.使用关键字 deinit 来定义析构器.只有类类型才有析构器. 2. 析构器工作原理 How Deinitialization Works 当一个实例的自动引用计数 Automatic Reference Counting 为0时,Swift会释放这个实例.一般情况下,当一个实例被dealloc时,释放资源的工作都有Swift完成,但是某些时候,你需要自己进行一些释放资源的工作,比如你创建一个类执行打开文件操作,并写数据到文

【iOS】Swift类的继承、构造方法、析构器等复习

构造方法内容会多一些,涉及Swift中构造的一些规则与概念.这次写了7个Person来复习,外加名人XiaoMing. Mark:Playground真是个好东西,特别练习写Swift时,实时显示真是大赞! 一.继承与重写, 防止重写 1.1 基类, 不继承任何类. Swift不想OC或者Java中继承自Object类.定义一个类,不继承任何类,该类就是基类. class Person1{ //这个Person1就是基类 func eat(){ println("eat a pig!"