Очень хороший способ сделать это, помимо использования Java 7, - использовать перечисления. Объявить перечисление, как показано ниже
Вышеприведенное перечисление содержит набор констант, значения которых установлены на строки, которые вы ожидаете, будут возвращены из базы данных. Поскольку вы можете использовать перечисления в случаях переключения, оставшийся код становится легким.
enum MyEnum
{
val1("value < 4"),val2("4<value<6");
private String value;
private MyEnum(String value)
{
this.value = value;
}
}
public static void chooseStrategy(MyEnum enumVal)
{
int value = getValue();
switch(enumVal)
{
case val1:
if(value > 2){}
break;
case val2:
if(4 < value && value < 6) {}
break;
default:
}
}
public static void main(String[] args)
{
String str = "4<value<6";
chooseStrategy(MyEnum.valueOf(str));
}
Все, что вам нужно сделать, это передать вашу строку методу enum.valueof и вернуть возвратное перечисление, которое помещается в блок блокировки выключателя для выполнения условного режима. В приведенном выше коде вы можете передать любую строку вместо того, что было передано в этом примере
Первая - это инициализация копирования, вторая - просто назначение. Нет конструктора присваивания.
A aa=bb;
использует созданный компилятором конструктор копий.
A cc;
cc=aa;
использует конструктор по умолчанию для построения cc
, а затем * оператор присваивания ** (operator =
) на уже существующий объект.
Я хочу знать, как выделить память конструктора присваивания и конструктора копирования?
blockquote>IDK, что вы имеете в виду, выделяя память в этом случае, но если вы хочу узнать, что происходит, вы можете:
class A { public : A(){ cout<<"default constructor"<<endl;}; A(const A& other){ cout<<"copy constructor"<<endl;}; A& operator = (const A& other){cout <<"assignment operator"<<endl;} };
Я также рекомендую вам взглянуть на:
Почему вместо конструктора преобразования вызывается конструктор конструктора?
Простыми словами,
Конструктор копирования вызывается, когда новый объект создается из существующего объекта как копия существующего объекта. И оператор присваивания вызывается, когда уже инициализированному объекту присваивается новое значение из другого существующего объекта.
Пример -
t2 = t1; // calls assignment operator, same as "t2.operator=(t1);"
Test t3 = t1; // calls copy constructor, same as "Test t3(t1);"
Что-то добавить о конструкторе копирования:
То, что @Luchian Grigore Said реализовано следующим образом
class A
{
public :
int a;
A(){ cout<<"default constructor"<<endl;};
A(const A& other){ cout<<"copy constructor"<<endl;};
A& operator = (const A& other){cout <<"assignment operator"<<endl;}
};
void main()
{
A sampleObj; //Calls default constructor
sampleObj.a = 10;
A copyConsObj = sampleObj; //Initializing calls copy constructor
A assignOpObj; //Calls default constrcutor
assignOpObj = sampleObj; //Object Created before so it calls assignment operator
}
OUTPUT
конструктор по умолчанию
конструктор копирования
конструктор по умолчанию
оператор присваивания
Я хочу добавить еще одну тему в эту тему. «Операторная функция оператора присваивания должна быть записана только как функция-член класса». Мы не можем сделать это как функцию друга, в отличие от другого двоичного или унарного оператора.
разница между конструктором копирования и конструктором присваивания равна:
<classname> <o1>=<o2>
) <o1>=<o2>
). И основные функции в обоих случаях одинаковы, они будут копировать данные из o2-o1 член-член.
Разница между конструктором копирования и оператором присваивания вызывает много путаницы для новых программистов, но это действительно не так уж сложно. Подведение итогов:
Пример для оператора присваивания:
Base obj1(5); //calls Base class constructor
Base obj2; //calls Base class default constructor
obj2 = obj1; //calls assignment operator
Пример для конструктора копирования:
Base obj1(5);
Base obj2 = obj1; //calls copy constructor
=default;
. – Deduplicator 18 July 2014 в 18:16= default
им, где необходим ctor по умолчанию: простое выполнение пустого тела по-прежнему считается пользователем -определенный ctor и, следовательно, (на уровне Standardese) не является тривиальным и дисквалифицирует тип от классификаций, требующих тривиального ctor. – underscore_d 12 July 2016 в 13:26:)
Попробуете ли вы еще раз объяснить, о чем вы говорите? – sbi 17 March 2018 в 22:03