Синтаксис:
class Sample
{
public:
int Sam_x;
int Sam_y;
Sample(): Sam_x(1), Sam_y(2) /* Classname: Initialization List */
{
// Constructor body
}
};
Необходимость списка инициализации:
class Sample
{
public:
int Sam_x;
int Sam_y;
Sample() */* Object and variables are created - i.e.:declaration of variables */*
{ // Constructor body starts
Sam_x = 1; */* Defining a value to the variable */*
Sam_y = 2;
} // Constructor body ends
};
в вышеуказанной программе. Когда выполняется конструктор класса, создаются Sam_x и Sam_y. Затем в корпусе конструктора определены эти переменные данных элемента.
Варианты использования:
В C переменные должны быть определены во время создания. то же самое в C ++, мы должны инициализировать переменную Const и Reference во время создания объекта, используя список инициализации. если мы выполним инициализацию после создания объекта (внутри тела конструктора), мы получим ошибку времени компиляции.
class Sample1
{
int i;
public:
Sample1 (int temp)
{
i = temp;
}
};
// Class Sample2 contains object of Sample1
class Sample2
{
Sample1 a;
public:
Sample2 (int x): a(x) /* Initializer list must be used */
{
}
};
При создании объекта для производного класса, который внутренне вызывает конструктор производных классов и вызывает конструктор базового класса (по умолчанию). если базовый класс не имеет конструктора по умолчанию, пользователь получит ошибку времени компиляции. Чтобы избежать этого, у нас должно быть либо
1. Default constructor of Sample1 class
2. Initialization list in Sample2 class which will call the parametric constructor of Sample1 class (as per above program)
class Sample3 {
int i; /* Member variable name : i */
public:
Sample3 (int i) /* Local variable name : i */
{
i = i;
print(i); /* Local variable: Prints the correct value which we passed in constructor */
}
int getI() const
{
print(i); /*global variable: Garbage value is assigned to i. the expected value should be which we passed in constructor*/
return i;
}
};
Как и все мы знаете, локальная переменная имеет самый высокий приоритет, чем глобальная переменная, если обе переменные имеют одинаковое имя. В этом случае программа учитывает значение «i» {как левую, так и правую переменную. i.e: i = i} как локальная переменная в конструкторе Sample3 (), а переменная-член класса (i) переопределена. Чтобы избежать этого, мы должны использовать либо
1. Initialization list
2. this operator.
Для этого нужно создать один внешний ключ, например:
CREATE TABLE IF NOT EXISTS TestBridge2
(
TestBridgeID integer Primary key,
WorkOrder varchar(15),
Date datetime,
Foreign key (WorkOrder, Date) references TestInformation2 (WorkOrder, Date)
) ENGINE = InnoDB;
Это должен быть один составной внешний ключ, а не два:
CREATE TABLE `TestBridge2` (
`TestBridgeID` INTEGER NOT NULL,
`WorkOrder` VARCHAR(15),
`Date` DATETIME,
PRIMARY KEY (`TestBridgeID`),
CONSTRAINT FOREIGN KEY (`WorkOrder`, `Date`) REFERENCES `TestInformation2` (`WorkOrder`, `Date`)
)
ENGINE=InnoDB;