Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.65
tihonya
11 / 7 / 1
Регистрация: 30.05.2012
Сообщений: 107
#1

Шаблон (прототип) класса - C++

25.06.2012, 18:58. Просмотров 3352. Ответов 12
Метки нет (Все метки)

Есть простенькая тестовая программа.

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
#include <iostream>
using namespace std;
 
class test
{
public:
    int *A, *B;
    test(){
        A=new int [10];
        B=new int [10];
        for (int i=0;i<10;i++){
            A[i]=rand()%100;
            B[i]=rand()%100;
        }
    }
 
        void show(test test1){
for(int i=0;i<10;i++)
        cout<<test1.A[i]<<"\t"<<test1.B[i]<<endl; 
    }
 
};
 
 
void main(){
    test CL;
    CL.show(CL);
}
Вопрос как разбить эту прогу на три файла?
1)главный срр,
2)заголовок с шаблоном класса test.
3) реализация класса test или его методов
что-то вроде этого и чтоб работало:
main.cpp
C++
1
2
3
4
5
#include "Cl_test.h"
void main(){
    test CL;
    CL.show(CL);
}
Cl_test.h
C++
1
2
3
4
5
6
7
8
9
class test
{
public:
    int *A, *B;
    test(){
    }
void show(test );
 
};
Cl_test.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using namespace std;
 
 
class test
{
public:
    int *A, *B;
    test(){
        A=new int [10];
        B=new int [10];
        for (int i=0;i<10;i++){
            A[i]=rand()%100;
            B[i]=rand()%100;
        }
    }
 
        void show(test test1){
for(int i=0;i<10;i++)
        cout<<test1.A[i]<<"\t"<<test1.B[i]<<endl; 
    }
 
};
PS:Там получаются две ошибки, оно либо не видит Cl_test.cpp, либо redefinition class test.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.06.2012, 18:58     Шаблон (прототип) класса
Посмотрите здесь:

прототип класса - C++
Нужен ли прототип класса в MinGW? При компиляции, что с ним , что без, ошибок нет.

Прототип класса - C++
В С++ можно составлять прототипы функций, но можно ли составлять прототипы классов? если да, то как это синтаксически делается? ...

Прототип метода, возвращающего объект класса - C++
Вобщем проблема смешная впринципе. То ли меня уже коротит с этой темой но никак не могу понять что сделать. Смотрел в интернетах :) не...

Шаблон класса - C++
Есть класс телефонный номер - #ifndef NUMBERR_H #define NUMBERR_H class numberr { int phone; public: int phone3; int...

Шаблон класса - C++
Привет товарищи. Тут в общем такая история, запилил шаблонный класс реализующий очередь , который работает на чарах, а вот на целочисленных...

Шаблон класса с++ - C++
StakNode.h #ifndef _STACKNODE_H_ #define _STACKNODE_H_ #include &lt;string&gt; template&lt;class T&gt; class Stack { ...

Шаблон класса - C++
Привет всем! Решил написать программу с шаблонами. Вот 3 файла: //tree.h #pragma once template &lt;class T&gt; class...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
soon
2539 / 1304 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
25.06.2012, 19:20     Шаблон (прототип) класса #2
tihonya, зачем, объясните мне, зачем разбивать класс на несколько файлов?

И, да, это невозможно. Методы можно вынести за пределы класса. И все.
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
25.06.2012, 19:22     Шаблон (прототип) класса #3
В одном файле вы определяете класс. В другом его методы без самого класса, а не как вы сделали в классе. В третьем функция main.
tihonya
11 / 7 / 1
Регистрация: 30.05.2012
Сообщений: 107
25.06.2012, 20:38  [ТС]     Шаблон (прототип) класса #4
Цитата Сообщение от soon Посмотреть сообщение
Методы можно вынести за пределы класса. И все.
Цитата Сообщение от tihonya Посмотреть сообщение
как разбить эту прогу на три файла?
1)главный срр,
2)заголовок с шаблоном класса test.
3) реализация класса test или его методов
Как вынести реализацию методов(или методы) за пределы класса? Желательно на примере этого кода.
Зы: сижу с включенной студией, так просто не получается. (
Зыы: буду знать, что некоторые из моих действий не возможны.
soon
2539 / 1304 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
25.06.2012, 20:47     Шаблон (прототип) класса #5
foo.hpp
C++
1
2
3
4
5
6
7
8
9
#ifndef __FOO_HPP__
#define __FOO_HPP__
 
struct Foo
{
    Foo();
};
 
#endif /*__FOO_HPP__*/
foo.cpp
C++
1
2
3
4
5
6
7
#include "foo.hpp"
#include <iostream>
 
Foo::Foo()
{
    std::cout << "It's works!" << std::endl;
}
main.cpp
C++
1
2
3
4
5
6
7
#include "foo.hpp"
 
int main()
{
    Foo f;
    return 0;
}
И т.д. по такому шаблону.
tihonya
11 / 7 / 1
Регистрация: 30.05.2012
Сообщений: 107
25.06.2012, 21:59  [ТС]     Шаблон (прототип) класса #6
Что означает вот это определение
C++
1
Foo::Foo()
?
Если поменять название функции нечего не работает.
Почему он требует конструктор класса ?

У вас со структурой(хотя это почти тоже самое что и класс) оно работает, у меня с классом не получается, и не получается добавить в эту структуру функцию с другим названием.

Если вернутся к моему коду, то как вывести метод show(реализацию) из класса test....
soon
2539 / 1304 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
25.06.2012, 22:10     Шаблон (прототип) класса #7
test.hpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#ifndef __TEST_HPP__
#define __TEST_HPP__
 
class Test
{
public:
    int *A, *B;
    Test();
    ~Test();
    void show(test);
};
 
#endif /*__TEST_HPP__*/
test.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include "test.hpp"
#include <cstdlib>
 
Test::Test()
{
    A = new int[10];
    B = new int[10];
    for(int i = 0; i < 10; i++){
        A[i] = std::rand() % 100;
        B[i] = std::rand() % 100;
}
 
Test::~Test()
{
    delete[] A;
    delete[] B;
}
 
void Test::show(test test1)
{
    for(int i = 0; i < 10; i++)
        std::cout << test1.A[i] << "\t" << test1.B[i] << std::endl; 
}
main.cpp
C++
1
2
3
4
5
6
7
#include "test.hpp"
 
int main()
{
    test CL;
    CL.show(CL);
}
Добавлено через 52 секунды
Цитата Сообщение от tihonya Посмотреть сообщение
вас со структурой(хотя это почти тоже самое что и класс)
RTFM, структра и класс - одно и то же, различия только в доступе по умолчанию.
tihonya
11 / 7 / 1
Регистрация: 30.05.2012
Сообщений: 107
25.06.2012, 23:08  [ТС]     Шаблон (прототип) класса #8
Так похоже оно все работает, только я исправил маленькую букву t в на большую Test кое где и одна {, понял что такоe ~Test -анти конструктор класса,.

Вот не понял одного, почему ~Test вызывается дважды после окончания функции show и по окончание функции main , соответственно удалить то, что только-что оно удалило не может и вылетает? с Этим разобраться и можно тему закрывать.
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
26.06.2012, 01:39     Шаблон (прототип) класса #9
Потому что два раза создается объект типа test.
tihonya
11 / 7 / 1
Регистрация: 30.05.2012
Сообщений: 107
26.06.2012, 02:07  [ТС]     Шаблон (прототип) класса #10
Цитата Сообщение от Chelioss Посмотреть сообщение
Потому что два раза создается объект типа test.
Где???
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
26.06.2012, 02:57     Шаблон (прототип) класса #11
Цитата Сообщение от soon Посмотреть сообщение
test CL;
Цитата Сообщение от soon Посмотреть сообщение
test test1
вот..
tihonya
11 / 7 / 1
Регистрация: 30.05.2012
Сообщений: 107
26.06.2012, 05:38  [ТС]     Шаблон (прототип) класса #12
Блин, а я уже хотел ругаться.
Я думал что просто указывал на то какой параметр принимает функция show, а она все таки создает новый экземпляр класса. Век живи - век учись.

Дай мне Боже терпения, а то так можно и наехать на людей которые помогают.

Спасибо.
ЗЫ: Можно сделать двумя вариантами
1) передать по значению.
C++
1
void Test::show(Test & test1){...}
2)
или убрать вообще принимаемое значение в show и обращаться непосредственно к А и В, функция же находится внутри класса. И то и то будет работать.

Тема исчерпана.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.06.2012, 14:24     Шаблон (прототип) класса
Еще ссылки по теме:

Шаблон класса - C++
Здраствуйте! Разрабатываю динамический массив. Необходимо реализовать, а не знаю как..не хватает опыта... короче: есть шаблон класса. В...

шаблон класса - C++
компилятор с линковщиком выдают такие ошибки 1&gt;main.obj : error LNK2019: ссылка на неразрешенный внешний символ &quot;public: __thiscall...

Шаблон класса - C++
Приветствую. Есть глупый вопрос. Имеется класс: #pragma once #include &quot;support.hpp&quot; template &lt;typename at&gt; class...

шаблон класса - C++
Подскажите, пожалуйста, как правильно реализовать метод print(), чтобы можно было выводить разные типы данных, например, можно было...

Шаблон класса - C++
Здравствуйте, необходимо реализовать шаблон структуры данных в памяти. Тип хранимого элемента – параметр шаблона. Шаблон может содержать...


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

Или воспользуйтесь поиском по форуму:
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
26.06.2012, 14:24     Шаблон (прототип) класса #13
Цитата Сообщение от tihonya Посмотреть сообщение
1) передать по значению.
По ссылке. По значению было раньше.
Yandex
Объявления
26.06.2012, 14:24     Шаблон (прототип) класса
Ответ Создать тему
Опции темы

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