Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Progi / Lesson 6 / lec6.doc
Скачиваний:
30
Добавлен:
28.03.2015
Размер:
342.53 Кб
Скачать

Void Init (int m,int s);

protected:

int min;

int sec;

};

void Record::Init(int m,int s)

{

min=m;

sec=s;

}

class Sprint : public Record

{

public:

void Init(int m,int s, int d);

private:

int dec;

};

// перегрузка

void Sprint::Init(int m,int s, int d)

{

min=m;

sec=s;

dec=d;

}

int main(int argc, char* argv[])

{

int m,n;

Record x;

x.Init(4,36); // min=4 sec=36

Sprint z;

z.Init(1,8,6); // min=1 sec=8 dec=6

}

Init(int m,int s,int d) в Sprint перекрывает наследуемый метод Init(int m,int s) в Record, не работает:

int main(int argc, char* argv[])

{

Sprintz;

z.Init(1,8); // неправильное число аргументов

.........

Для вызова метода другого класса явно указывается принадлежность этому классу.

z.Record::Init(5,8); // min=5 sec=8 dec не определено

Вариант Init класса Sprint с вызовом Init базового класса.

void Sprint::Init(int m,int s, int d)

{

Record::Init(m,s); // вызов метода из другого класса

dec=d;

}

Возможна перегрузка метода в производном классе с такими же параметрами как в базовом классе.

Добавлен метод:

void Sprint::Init(int m,int s)

{

min=m;

sec=s;

dec=1;

}

int main(int argc, char* argv[])

{

Sprint z;

z.Init(1,8,6); // min=1 sec=8 dec=6

z.Init(1,8);// вызов второго метода

Перегрузка методов базового класса в java

class Record

{

protected int min,sec;

public void Init(int m,int s)

{

min=m;

sec=s;

}

}

class Sprint extends Record

{

private int dec;

public void Init(int m,int s,int d)

{

min=m;

sec=s;

dec=d;

}

}

public class WorkSport

{

public static void main (String args[] )

{

int p;

Record a=new Record();

a.Init(2, 40);

p=a.Numbersec();

System.out.printf("%d\n ", p);

Sprint b=new Sprint();

b.Init(1, 10,5);

p=b.Numberdec();

System.out.printf("%d\n ", p);

}

}

В java перегруженный метод Init(int m,int s,int d) в Sprint не перекрывает наследуемый метод Init(int m,int s) из Record

Sprint b=new Sprint();

b.Init(1, 10,5);

Sprint c=new Sprint();

c.Init(2, 15); // вызов наследуемой функции из Record с двумя аргументами

Вариант Init класса Sprint с вызовом наследуемого метода из Record

public void Init(int m,int s,int d)

{

super.Init(m,s); // вызов метода базового класса (аналог Record::Init(m,s) на C++

dec=d;

}

Если в Sprint нет перегруженного метода из Record Init(int m,int s) с двумя аргументами в Java можно записать Init(m,s); без super. Понятно, где брать Init с двумя аргументами.

Перегрузка методов базового класса в c#

classSprint:Record

{

private int dec;

..................................

public void Init(int m, int s, int d) // перегрузка

{

min = m;

sec = s;

dec = d;

}

static void Main(string[] args)

{

Record a=new Record();

Sprint b=new Sprint();

Sprint c = new Sprint();

int m, k;

a.Init(5, 6);

b.Init(5, 6,9);// вызов перегруженного метода

c.Init(5, 6);// вызов наследуемого метода (нет перекрытия как на C++)

с.Putdec(8);

..................................

Возможна перегрузка метода с теми же аргументами, как и в базовом классе.

class Sprint : Record

{

private int dec;

public void Putdec(int d)

{

dec=d;

}

public void Init(int m, int s, int d)

{

min = m;

sec = s;

dec = d;

}

public void Init(int m, int s, int d) // вариант с вызовом базового класса

{

base.Init(m, s);

dec = d;

}

public void Init(int m, int s) // перегрузка базового с теми же аргументами

{

min = m;

sec = s;

dec = 1;

}

static void Main(string[] args)

{

Record a=new Record();

Sprint b=new Sprint();

Sprint c = new Sprint();

int m, k;

a.Init(5, 6);

b.Init(5, 6);// вызов перегруженного метода dec=1

c.Init(5, 6, 8);

b.Putdec(8);

11) Конструкторы в производных классах

Конструкторы не наследуются. Правила работы с конструкторами производного класса.

Если в базовом классе есть конструктор без параметров, при создании объектов производного класса сначала вызывается конструктор базового класса, затем производного. При вызове деструктора объекта производного класса сначала вызывается деструктор производного класса, затем базового.

Варианты конструкторов базового и производного классов

Соседние файлы в папке Lesson 6