Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
197 / 166 / 19
Регистрация: 05.05.2013
Сообщений: 1,226
1

Наследование, перегрузка, конструктор

29.05.2013, 00:01. Просмотров 1302. Ответов 10
Метки нет (Все метки)

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <iostream>
 
class animal
{
public:
animal() { }
animal(int a) { age = a; }
~animal() { }
void set_age(int b) { age = b; }
int get_age() { return age; }
 
protected:
int age;
};
 
class dog: public animal
{
public:
dog() {  }
dog(int f) { weight = f; }
~dog() { }
void set_weight(int g) { weight = g; }
int get_weight() { return weight; }
    
protected:
int weight;
};
 
int main()
{
dog taksa(5);
 
std::cout << "age: " << taksa.get_age() << " weight: " << taksa.get_weight() << "\n";
 
system("pause");
return 0;
}


подскажите, как в данном случае присвоить значение переменной члену - age, без использования set_age(), а через конструктор?

единственно что мне пришло в голову в класс dog добавить еще один конструктор - dog(int h, int k) { weight = h; age = k; }

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
 
class animal
{
public:
animal() { }
animal(int a) { age = a; }
~animal() { }
void set_age(int b) { age = b; }
int get_age() { return age; }
 
protected:
int age;
};
 
class dog: public animal
{
public:
dog() {  }
dog(int f) { weight = f; }
dog(int h, int k) { weight = h; age = k; }
~dog() { }
void set_weight(int g) { weight = g; }
int get_weight() { return weight; }
    
protected:
int weight;
};
 
int main()
{
dog taksa(5);
 
std::cout << "age: " << taksa.get_age() << " weight: " << taksa.get_weight() << "\n";
 
system("pause");
return 0;
}



существуют ли еще более простые и правильные способы?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.05.2013, 00:01
Ответы с готовыми решениями:

Наследование и конструктор.
Вот #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; class String //базовый класс ...

Перегрузка и конструктор
определение числа дней, прошедших между двумя датами (операция %); Написал программу и...

Наследование(Не вызывается конструктор)
f3=f1+f2; 1) Вызывается Fraction operator+(const Fraction&amp; other) 2) Для возвращенного значения...

Наследование и конструктор с параметрами
Добрый вечер! При разработке программы столкнулся с проблемой. По условию нужно использовать...

10
Грамотный. Безпорно.
16860 / 9756 / 1880
Регистрация: 27.09.2012
Сообщений: 24,165
Записей в блоге: 2
29.05.2013, 00:04 2
Цитата Сообщение от VLK Посмотреть сообщение
без использования set_age()
C++
1
age=значение;
Цитата Сообщение от VLK Посмотреть сообщение
а через конструктор?
C++
1
dog():animal(значение) {  }
0
интересующийся
307 / 278 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
29.05.2013, 00:05 3
C++
1
2
3
4
5
6
7
8
9
class Foo
{
    int val;
 
    public:
        Foo(int);
}
 
Foo::Foo(int v) : val(v) {}
0
413 / 409 / 95
Регистрация: 06.10.2011
Сообщений: 832
29.05.2013, 00:08 4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <iostream>
 
class animal
{
public:
    animal(): age(0) {}
    animal(int a): age(a) {}
    virtual ~animal() {}
    void set_age(int b)
    { age = b; }
    int get_age()
    { return age; }
protected:
    int age;
};
 
class dog: public animal
{
public:
    dog(): animal(), weight(0) {}
    dog(int a, int w): animal(a), weight(w) {}
    ~dog() {}
    void set_weight(int g)
    { weight = g; }
    int get_weight()
    { return weight; }
protected:
    int weight;
};
 
int main()
{
    dog taksa(5, 50);
 
    std::cout << "age: " << taksa.get_age() << " weight: " << taksa.get_weight() << "\n";
 
    system("pause");
    return 0;
}
1
197 / 166 / 19
Регистрация: 05.05.2013
Сообщений: 1,226
29.05.2013, 00:10  [ТС] 5
Цитата Сообщение от Olivеr Посмотреть сообщение

C++
1
dog(int a, int w): animal(a), weight(w) {}
это общепринятый стиль программирования? (хороший стиль программирования)
0
413 / 409 / 95
Регистрация: 06.10.2011
Сообщений: 832
29.05.2013, 00:11 6
По Стенли Липпману - да
0
197 / 166 / 19
Регистрация: 05.05.2013
Сообщений: 1,226
29.05.2013, 00:22  [ТС] 7
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
 
class animal
{
public:
animal() { }
animal(int a) { age = a; }
~animal() { }
void set_age(int b) { age = b; }
int get_age() { return age; }
 
protected:
int age;
};
 
class dog: public animal
{
public:
dog() {  }
dog(int f) { weight = f; }
dog(int h, int z) { weight = h; animal(z); }
~dog() { }
void set_weight(int g) { weight = g; }
int get_weight() { return weight; }
    
protected:
int weight;
};
 
int main()
{
dog taksa(5,10);
 
std::cout << "age: " << taksa.get_age() << " weight: " << taksa.get_weight() << "\n";
 
system("pause");
return 0;
}


а почему не хочет работать? показывает на строчку 21 ( dog(int h, int z) { weight = h; animal(z); } ) и пишет - переопределение формального параметра "z".

что не так?
0
413 / 409 / 95
Регистрация: 06.10.2011
Сообщений: 832
29.05.2013, 00:24 8
Используйте списки инициализации конструкторов, как в постах 2 и 4.

Добавлено через 42 секунды
C++
1
2
animal() { }
animal(int a) { age = a; }
- это плохой стиль
1
197 / 166 / 19
Регистрация: 05.05.2013
Сообщений: 1,226
29.05.2013, 00:25  [ТС] 9
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
 
class animal
{
public:
animal() { }
animal(int a) { age = a; }
~animal() { }
void set_age(int b) { age = b; }
int get_age() { return age; }
 
protected:
int age;
};
 
class dog: public animal
{
public:
dog() {  }
dog(int f) { weight = f; }
dog(int h, int z):  weight(h), animal(z) { }
~dog() { }
void set_weight(int g) { weight = g; }
int get_weight() { return weight; }
    
protected:
int weight;
};
 
int main()
{
dog taksa(5,10);
 
std::cout << "age: " << taksa.get_age() << " weight: " << taksa.get_weight() << "\n";
 
system("pause");
return 0;
}


а так работает, когда изменил строчку 21 на - dog(int h, int z): weight(h), animal(z) { }, хотя суть не меняется, ох уж мне это программирование

Цитата Сообщение от Olivеr Посмотреть сообщение
Используйте списки инициализации конструкторов, как в постах 2 и 4.

Добавлено через 42 секунды
C++
1
2
animal() { }
animal(int a) { age = a; }
- это плохой стиль
за то как говорится не отходя от кассы, а не то что, сначала объявляешь метод, а потом после класса его расписываешь.
0
413 / 409 / 95
Регистрация: 06.10.2011
Сообщений: 832
29.05.2013, 00:26 10
так и должно быть. только порядок поменяйте: сначала должен создаваться базовый класс
1
211 / 130 / 28
Регистрация: 20.03.2009
Сообщений: 1,120
Записей в блоге: 16
29.05.2013, 03:50 11
Все нормально:
C++
1
2
animal() {}
animal(int a): age(a) {}
Иначе до выполнения тела конструктора animal будут вызваны конструкторы по умолчанию для всех его членов, что приведет в лучшем случае к дополнительным расходам, в худшем - к ошибке компиляции, если у каких-то членов нет конструктора по умолчанию. Ну и нельзя будет инициализировать нужным значением родительский класс, как в примере выше.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.05.2013, 03:50

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Наследование, конструктор класса
Объясните мне пожалуйста, что значит такая конструкция: class CMyPaintDC:public CPaintDC {...

Наследование и перегрузка <<
Здравствуйте! Столкнулся со следующей проблемой: class A { int data,info; // .. public:...

Наследование и конструктор без параметров
Здравствуйте, я нашел один листинг в книге Р. Лафоре. Не могу понять синтаксис конструктора. ...

Наследование и конструктор с аргументами по умолчанию
Есть некоторый абстрактный класс &quot;объект&quot;, который наследуют все объекты (код конструктора): ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.