Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: New && класс  (Прочитано 1818 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн #define true 0

  • Автор темы
  • Участник
  • *
  • Сообщений: 149
  • В Гугл, животное, кури маны! П.С.:шутка конечно :)
    • Просмотр профиля
New && класс
« : 19 Декабря 2011, 20:41:14 »
есть класс:
class A{
A(int x, int y);
}

сделать массив таких экземпляров?!
A *Matrix = new A[10](1,2);

error: ISO C++ forbids initialization in array new [-fpermissive]
CPU :AMD Athlon(tm) II X2 265 Processor 3315MHz | GPU: GeForce GT 240 PCI Express

Оффлайн Señor_Gaga

  • Забанен
  • Активист
  • *
  • Сообщений: 878
  • Ubuntu 12.04LTS & Linux Mint 13LTS "Maya"
    • Просмотр профиля
Re: New && класс
« Ответ #1 : 19 Декабря 2011, 21:06:41 »
У вас конструктор не доделан, надо типа того:
class A{
    int x, y;
    A(int x, int y) {
       this.x = x;
       this.y = y;
    }
}

Оффлайн #define true 0

  • Автор темы
  • Участник
  • *
  • Сообщений: 149
  • В Гугл, животное, кури маны! П.С.:шутка конечно :)
    • Просмотр профиля
Re: New && класс
« Ответ #2 : 19 Декабря 2011, 21:15:57 »
У вас конструктор не доделан, надо типа того:
class A{
    int x, y;
    A(int x, int y) {
       this.x = x;
       this.y = y;
    }
}

..main.cpp: In constructor ‘A::A(int, int)’:
..main.cpp:6:13: error: request for member ‘x’ in ‘this’, which is of non-class type ‘A* const’
..main.cpp:7:13: error: request for member ‘y’ in ‘this’, which is of non-class type ‘A* const’

Пользователь решил продолжить мысль 19 Декабря 2011, 21:57:59:
это не возможно к сожалению  :(
« Последнее редактирование: 19 Декабря 2011, 21:57:59 от #define true 0 »
CPU :AMD Athlon(tm) II X2 265 Processor 3315MHz | GPU: GeForce GT 240 PCI Express

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: New && класс
« Ответ #3 : 20 Декабря 2011, 08:05:36 »
1) this->x/y
2) конструктор приватный =) я хз что ты этим хотел сказать. явно не синглтон делал
3) http://www.rsdn.ru/forum/cpp/3351356.flat.aspx
4) в С++11 есть удобная инициализация векторов. в чем проблема воспользоваться?

Оффлайн egorchik007

  • Участник
  • *
  • Сообщений: 156
    • Просмотр профиля
Re: New && класс
« Ответ #4 : 20 Декабря 2011, 16:11:42 »
class A {
private:
int a,b;
public:
A (int x, int y) {
(this->x)=x;(this->y)=y;
}
};

int main () {
A* mas = new A(1,5) [10];
return 0;
}

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: New && класс
« Ответ #5 : 20 Декабря 2011, 19:36:36 »
Код: (C++) [Выделить]
#include <iostream>

class A {
int a,b;
public:
A () : a(0), b(0) {
std::cout << "A()" << std::endl;
}
A (int x, int y) : a(x), b(y) {
std::cout << "A(" << x << ',' << y << ')' << std::endl;
}
A (const A& orig) {
a = orig.a;
b = orig.b;
std::cout << "A(copy)" << std::endl;
}
friend std::ostream &operator <<(std::ostream &oss, const A &obj);
~A() {
std::cout << "~A()" << std::endl;
}
};

std::ostream &operator <<(std::ostream &oss, const A &obj)
{
oss << '(' << obj.a << ',' << obj.b << ')';
return oss;
}

int main () {
A *mas = new A[10];
std::fill(mas, mas+10, A(1,5));
for (size_t i = 0; i < 10; ++i)
std::cout << mas[i];
std::cout << std::endl;
delete [] mas;
return 0;
}

Оффлайн egorchik007

  • Участник
  • *
  • Сообщений: 156
    • Просмотр профиля
Re: New && класс
« Ответ #6 : 21 Декабря 2011, 01:36:00 »
Код: (C++) [Выделить]
#include <iostream>

class A {
int a,b;
public:
A () : a(0), b(0) {
std::cout << "A()" << std::endl;
}
A (int x, int y) : a(x), b(y) {
std::cout << "A(" << x << ',' << y << ')' << std::endl;
}
A (const A& orig) {
a = orig.a;
b = orig.b;
std::cout << "A(copy)" << std::endl;
}
friend std::ostream &operator <<(std::ostream &oss, const A &obj);
~A() {
std::cout << "~A()" << std::endl;
}
};

std::ostream &operator <<(std::ostream &oss, const A &obj)
{
oss << '(' << obj.a << ',' << obj.b << ')';
return oss;
}

int main () {
A *mas = new A[10];
std::fill(mas, mas+10, A(1,5));
for (size_t i = 0; i < 10; ++i)
std::cout << mas[i];
std::cout << std::endl;
delete [] mas;
return 0;
}
теперь бедняга (автор темы) совсем запутается. надо как на друших форумах, пнуть на мануалы, учебники. ;)

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: New && класс
« Ответ #7 : 21 Декабря 2011, 08:14:18 »
разберётся. тем более что тут реализовано немного не то что требовалось

Оффлайн Дядюшка Ау

  • Участник
  • *
  • Сообщений: 123
  • Дайте две!
    • Просмотр профиля
Re: New && класс
« Ответ #8 : 26 Декабря 2011, 16:08:00 »
А разве не вот так надо:
Код: (C++) [Выделить]
A array[10]={A(1,1), A(1,2) /*и так далее*/};

??
Ubuntu 12.04 для поколупацца, Win7 для поработать

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: New && класс
« Ответ #9 : 26 Декабря 2011, 16:15:35 »
см тему. new и class

Оффлайн ilovebelarus

  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
Re: New && класс
« Ответ #10 : 28 Декабря 2011, 10:46:07 »
нельзя вызывать не конструктор по умолчанию для инициализации массива объектов
если очень хочеться, то можно просто в классе реализовать статический метод который будет создавать массив, и , пробегая по нему, переопределять объекты, а потом возвращать указатель на этот массив

Оффлайн Дядюшка Ау

  • Участник
  • *
  • Сообщений: 123
  • Дайте две!
    • Просмотр профиля
Re: New && класс
« Ответ #11 : 28 Декабря 2011, 16:39:38 »
нельзя вызывать не конструктор по умолчанию для инициализации массива объектов
если очень хочеться, то можно просто в классе реализовать статический метод который будет создавать массив, и , пробегая по нему, переопределять объекты, а потом возвращать указатель на этот массив

codepad.org разрешает делать вот так и не ругается на объявление массива:
Код: (C++) [Выделить]
class A
{
private:
int a;
int b;

public:
A(int _a, int _b){;}
};

int main()
{
A arr[2] = {A(1,1),A(2,2)};
return 0;
}
Ubuntu 12.04 для поколупацца, Win7 для поработать

 

Страница сгенерирована за 0.029 секунд. Запросов: 25.