Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C#&C++] Классы, наследование, конструкторы 
:(
    Опции темы
Hlorka
Дата 21.4.2007, 17:03 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 21.4.2007

Репутация: нет
Всего: нет



Плиз помогите решить задачу, очень надо!!!

Обявить класс в котором имеется два поля вещесвенного типа, конструктор по умолчанию устанавливает эти поля со значениями 3,14 и 6,28.
Конструктор с аргументами принимает два параметра: присваивает 1-му полю значение полусуммы, а 2-му значение полуразницы.
Имеется функция для печати полей. Создать объект этого класса с использованием всех конструкторов, значение аргумента для конструктора вводятся с клавиатуры.
От этого класса породить новый класс, добавить ещё поле целого типа и конструктор с тремя аргументами. Первые два аргумента кострукторы выполняют те же дейсвия (полусумма, полуразница), а значение 3-го аргумента присваевается к добавленному полю.
Имеется функция для печати полей класса, имеющая точно такой же заголовок, как и функция базового класса. Создать объект этого класса и распечатать объекты поля.
PM MAIL   Вверх
ama_kid
Дата 21.4.2007, 21:11 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 16
Всего: 95



Вообще, с этим - в центр помощи лучше... Ну вот, к примеру:
Код
#include <iostream>
#include <conio.h>
using namespace std;

class TFoo
{
public:
    double arg1;
    double arg2;
    TFoo(){arg1 = 3.14; arg2 = 6.28;};
    ~TFoo(){cout<<"Object destroyed"<<endl;};
    TFoo(double var1, double var2) {arg1 = (var1+var2)/2; arg2 = (var1-var2)/2;};
    void PrintFields();
};

class TDerivedFoo : public TFoo
{
public:
    int arg3;
    TDerivedFoo(){arg3 = 2;};
    TDerivedFoo(double var1, double var2, double var3) {arg1 = (var1+var2)/2; arg2 = (var1-var2)/2; arg3 = var3;};
    void PrintFields();
};

void TFoo::PrintFields()
{
    cout<<endl;
    cout<<"Arg1 = "<<arg1<<endl;
    cout<<"Arg2 = "<<arg2<<endl;
}

void TDerivedFoo::PrintFields()
{
    TFoo::PrintFields();
    cout<<"Arg3 = "<<arg3<<endl;
}

void main(){
  double arg21=0.0, arg22 =0.0;
  double arg41=0.0, arg42 =0.0;
  int arg43 =0;
    
  cout<< "Input 1 arg for Object2:"; cin>>arg21;
  cout<< "Input 2 arg for Object2:"; cin>>arg22;

  cout<< "Input 1 arg for Object4:"; cin>>arg41;
  cout<< "Input 2 arg for Object4:"; cin>>arg42;
  cout<< "Input 3 arg for Object4:"; cin>>arg43;

  TFoo *obj1 = new TFoo();
  TFoo *obj2 = new TFoo(arg21,arg22);
  TDerivedFoo *obj3 = new TDerivedFoo();
  TDerivedFoo *obj4 = new TDerivedFoo(arg41,arg42,arg43);

  obj1->PrintFields();
  obj2->PrintFields();
  obj3->PrintFields();
  obj4->PrintFields();


  delete obj1;
  delete obj2;
  delete obj3;
  delete obj4;
  getch();
}



--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
Alexeis
Дата 22.4.2007, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 23
Всего: 459




M
Alexeis
Модератор: на форуме запрещено создавать дубликаты тем. Дубликаты удалены.



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Hlorka
Дата 22.4.2007, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 21.4.2007

Репутация: нет
Всего: нет



проверьте этот вариант

Код

class CA
{
  public flout x,y;
    public CA()
     {
       x=3.14; y=6.28;
     }
    public CA(ref int a, ref int b)
     {
      x=(a+b)/2;
      y=(a-b)/2;
    }
    public void MyPrint()
     {
       Console.WriteLine("x={0.2}, y={1.2}",x,y);
     }
}
Class CB:CA
{
  public int i;
    public CA(ref int a, ref int b, int c):base(a,b)
     {
       i=c;
     }
    public void MyPrint()
     {
       Console.WriteLine("x={0.2}, y={1.2}, i={2}",x,y,i);
     }
}
     Static void Main()
{
    Console.WriteLine("Введите первое число"); string str1=Console.Redlne(); Console.WriteLine("Введите первое число");
    string str2=Console.Redlne(); int x=Convert.ToInt32(str1); int y=Convert.ToInt32(str2);
CA ob1= new CA();
ob1.MyPrint();
CA ob2= new CA(x,y);
ob2.MyPrint();
CB ob3= new CB(5,6,3);
ob3.MyPrint();
}


Это сообщение отредактировал(а) Alexeis - 22.4.2007, 12:34
PM MAIL   Вверх
Alexeis
Дата 22.4.2007, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 23
Всего: 459



Модератор: используйте подсветку кода http://forum.vingrad.ru/index.php?showtopic=126445


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Hlorka
Дата 22.4.2007, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 21.4.2007

Репутация: нет
Всего: нет



      "проверьте этот вариант"

А он правильный??
PM MAIL   Вверх
Alexeis
Дата 22.4.2007, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 23
Всего: 459



Hlorka, чтобы в этом убедиться нужно проверить, потому я так и отредактировал  smile 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
ivashkanet
Дата 23.4.2007, 08:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 9
Всего: 149



Hlorka, судя по синтаксису, это .Net, так?
Тогда твой вариант почти верный. Если изменить flouна float  и имя конструктора во втором классе хорошо обработать твой код напильником, то он скомпилится, но будет висеть 1 Варнинг: что-то типа "метод MyPrint скрывает метод с тем же именем в базовом классе".
Чтобы от него избавиться нужно либо сделать базовый метод перегружаемым и перегрузить его в наследнике (сделано ниже), либо добавить ключевое слово new в объявлении метода в наследнике (public new void MyPrint())

Код

    class Program
    {
       [STAThread]
        static void Main(string[] args)
        {
            CA ob1 = new CA();
            ob1.MyPrint();
            CA ob2 = new CA(13, 23);
            ob2.MyPrint();
            CB ob3 = new CB(5, 6, 3);
            ob3.MyPrint();


            Console.WriteLine("Done");
            Console.ReadKey();
        }
    }

    class CA
    {
        public float x, y;
        public CA()
        {
            x = 3.14F; y = 6.28F;
        }
        public CA(float a, float b)
        {
            x = (a + b) / 2;
            y = (a - b) / 2;
        }
        public virtual void MyPrint()
        {
            Console.WriteLine("x={0}, y={1}", x, y);
        }
    }
    class CB : CA
    {
        public int i;
        public CB( float a,  float b, int c)
            : base(a, b)
        {
            i = c;
        }
        public override void MyPrint()
        {
            Console.WriteLine("x={0}, y={1}, i={2}", x, y, i);
        }
    }


Это сообщение отредактировал(а) ivashkanet - 23.4.2007, 08:10
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.1230 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.