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

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

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

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

И, да, это невозможно. Методы можно вынести за пределы класса. И все.
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
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
 Аватар для soon
2536 / 1301 / 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
 Аватар для soon
2536 / 1301 / 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,131
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,131
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++
Прототип класса C++

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

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

Текущее время: 12:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru