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

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

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

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

25.06.2012, 18:58. Просмотров 3611. Ответов 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.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.06.2012, 18:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Шаблон (прототип) класса (C++):

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

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

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

Шаблоны функций, Ошибка: для использования класса шаблон требуется список аргументов шаблон - C++
Есть у меня 3 структуры Трамвай , Троллейбус , Автобус. Для автобуса определены функции (работают) Троллейбус и Трамвай одинаковые поля...

Шаблон класса, параметром которого должны являться наследники определённого класса - C++
Сразу извиняюсь за нубский вопрос. Суть в том, что я хочу сделать шаблон класса, параметром которого должны являтся наследники...

Шаблон класса (параметризация класса) - C++
Нужна помощь и советы!!! Англо-русский словарь построен как список. Каждая компонента содержит английское слово, соответствующее...

12
soon
2541 / 1306 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
25.06.2012, 19:20 #2
tihonya, зачем, объясните мне, зачем разбивать класс на несколько файлов?

И, да, это невозможно. Методы можно вынести за пределы класса. И все.
0
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
25.06.2012, 19:22 #3
В одном файле вы определяете класс. В другом его методы без самого класса, а не как вы сделали в классе. В третьем функция main.
0
tihonya
11 / 7 / 1
Регистрация: 30.05.2012
Сообщений: 107
25.06.2012, 20:38  [ТС] #4
Цитата Сообщение от soon Посмотреть сообщение
Методы можно вынести за пределы класса. И все.
Цитата Сообщение от tihonya Посмотреть сообщение
как разбить эту прогу на три файла?
1)главный срр,
2)заголовок с шаблоном класса test.
3) реализация класса test или его методов
Как вынести реализацию методов(или методы) за пределы класса? Желательно на примере этого кода.
Зы: сижу с включенной студией, так просто не получается. (
Зыы: буду знать, что некоторые из моих действий не возможны.
0
soon
2541 / 1306 / 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;
}
И т.д. по такому шаблону.
0
tihonya
11 / 7 / 1
Регистрация: 30.05.2012
Сообщений: 107
25.06.2012, 21:59  [ТС] #6
Что означает вот это определение
C++
1
Foo::Foo()
?
Если поменять название функции нечего не работает.
Почему он требует конструктор класса ?

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

Если вернутся к моему коду, то как вывести метод show(реализацию) из класса test....
0
soon
2541 / 1306 / 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, структра и класс - одно и то же, различия только в доступе по умолчанию.
1
tihonya
11 / 7 / 1
Регистрация: 30.05.2012
Сообщений: 107
25.06.2012, 23:08  [ТС] #8
Так похоже оно все работает, только я исправил маленькую букву t в на большую Test кое где и одна {, понял что такоe ~Test -анти конструктор класса,.

Вот не понял одного, почему ~Test вызывается дважды после окончания функции show и по окончание функции main , соответственно удалить то, что только-что оно удалило не может и вылетает? с Этим разобраться и можно тему закрывать.
0
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
26.06.2012, 01:39 #9
Потому что два раза создается объект типа test.
0
tihonya
11 / 7 / 1
Регистрация: 30.05.2012
Сообщений: 107
26.06.2012, 02:07  [ТС] #10
Цитата Сообщение от Chelioss Посмотреть сообщение
Потому что два раза создается объект типа test.
Где???
0
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
26.06.2012, 02:57 #11
Цитата Сообщение от soon Посмотреть сообщение
test CL;
Цитата Сообщение от soon Посмотреть сообщение
test test1
вот..
1
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 и обращаться непосредственно к А и В, функция же находится внутри класса. И то и то будет работать.

Тема исчерпана.
0
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
26.06.2012, 14:24 #13
Цитата Сообщение от tihonya Посмотреть сообщение
1) передать по значению.
По ссылке. По значению было раньше.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.06.2012, 14:24
Привет! Вот еще темы с ответами:

Создать шаблон некоторого класса, возможно, реализованного с применением некоторого серверного класса - C++
Добрый день, Уважаемые профессионалы. Прошу помочь в решении задачи. Честно говоря, я ничего не понимаю. И вот...решил...

Шаблон класса. - C++
Приведите пожалуйста пример какого нибудь простого класса с меню. Чтобы пользователь сам вводил, а не компьютер заполнял.

шаблон класса - C++
Спроектировать шаблон класса. В основной программе создать соответствующие структуры простых и сложных структур и продемлонстрировать...

Шаблон класса - C++
Здравствуйте. Допустим есть шаблон класса: template &lt;typename T&gt; class M { M&lt;T&gt; operator* (const M &amp;m); //M operator*...


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

Или воспользуйтесь поиском по форуму:
13
Yandex
Объявления
26.06.2012, 14:24
Ответ Создать тему
Опции темы

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