code: function(name, zoneLetter, cf, vpc, routeTable) {
    var self = this;
  
    self.isPublic         = false;
  
    base.Base.call(this, cf, 'EC2::Subnet', name);
    self.addProperty('VpcId', vpc.ref());
  
    self.zone = self.addProperty('AvailabilityZone', vpc.az(zoneLetter));
  
    self.cidrBlock = function(cidr) {
      self.cidr = vpc.mkSubnetCidrBlock(cidr);
      return self.addProperty('CidrBlock', self.cidr);
    };
  
    self.mapPublicIpOnLaunch = function(value) {
      if (arguments.length === 0) { value = true; }
      return self.addProperty('MapPublicIpOnLaunch', !!value);
    };
  
    var assocName = name+'RouteTableAssociation';
    cf.data.Resources[assocName] = subnet.makeSubnetRouteTableAssociation(assocName, cf, self, routeTable);
  
    //self.output(name+"CidrBlock", self.getAtt("CidrBlock"), "Subnet "+name+"CIDR block");   /* Do not know why CidrBlock is not available */
  }
docs: Base for subnet class.