Вы всегда можете создать массив указателей, указывая на объекты автомобилей, а затем создать объекты в цикле for, как вы хотите, и сохранить их адрес в массиве, например:
#include <iostream>
class Car
{
private:
Car(){};
int _no;
public:
Car(int no)
{
_no=no;
}
void printNo()
{
std::cout<<_no<<std::endl;
}
};
void printCarNumbers(Car *cars, int length)
{
for(int i = 0; i<length;i++)
std::cout<<cars[i].printNo();
}
int main()
{
int userInput = 10;
Car **mycars = new Car*[userInput];
int i;
for(i=0;i<userInput;i++)
mycars[i] = new Car(i+1);
примечание новый способ !!!
printCarNumbers_new(mycars,userInput);
return 0;
}
Все, что вам нужно изменить в новом методе, - это обработка автомобилей как указателей, чем статических объектов в параметре и при вызове метода printNo (), например:
void printCarNumbers_new(Car **cars, int length)
{
for(int i = 0; i<length;i++)
std::cout<<cars[i]->printNo();
}
на конец main хорош, чтобы удалить всю динамически распределенную память, подобную этой
for(i=0;i<userInput;i++)
delete mycars[i]; //deleting one obgject
delete[] mycars; //deleting array of objects
Надеюсь, я помог, ура!
Вы можете использовать EnhancedPatternLayout в log4j для форматирования трассировок стека.
См. http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/EnhancedPatternLayout.html , в частности раздел о «бросаемом» шаблоне в таблице шаблонов.
Обратите внимание, что поддержка % throwable {n}
довольно нова и требует как минимум log4j 1.2.16 (который является последним на момент написания)
Для целей отслеживания это билет, касающийся его реализации: https://issues.apache.org/bugzilla/show_bug.cgi?id=48902
Да, это часть log4j, начиная с log4j 1.2.16
Вот исходное предложение в системе отслеживания проблем Apache, в котором подробно описывается, как каждое из приложений% метательный узор выглядит так: https://issues.apache.org/bugzilla/show_bug.cgi?id=48902#c0
Ага ... EnhancedPatternLayout предоставляет эту функцию.(Начиная с Log4J-1.2.16, раньше был в лишних товарищах).
Для конфигурации log4j
<appender name="Console" class="org.apache.log4j.ConsoleAppender">
<param name="Threshold" value="debug"/>
<layout class="org.apache.log4j.EnhancedPatternLayout">
<param name="ConversionPattern" value="%d %-5p [%t] %c.%M - %m%n %throwable{short}"/>
</layout>
</appender>
и для фрагмента кода Java, например
, генерировать новое исключение (новое Exception ("Inner Exception"));
Вы получите следующее в файле журнала ...
java.lang.Exception: java.lang.Exception: Inner Exception
Если мы удалим '% throwable {short} 'из нашего конфигурационного файла log4j мы получим полную трассировку стека
Я не знаю такого варианта. Но вы можете расширить текущий аппендер (например, RollingFileAppender
) и предоставить метод append
/ doAppend
/ subAppend
(в зависимости от того, какой класс вы расширяете) для обработки этого.
Выбрасываемая информация содержится в LoggingEvent.throwableInformation
Тем не менее, я не уверен, что вы должны это делать - таким образом, вы можете потерять важную информацию.