2014-01-19 3 views
-4

В приведенном ниже коде у меня есть класс с двумя атрибутами, мне нужно изменить его в соответствии со значением другого без изменения значения второго. Я не хочу, чтобы создать новую переменную временную, чтобы сделать это (я не хочу, чтобы выделить новую память и очистить старый), мне нужно использовать указателиC++ динамические атрибуты класса 2

#include<iostream> 

using namespace std; 

class A{ 

private: 

int **m1; 
int **m2; 

void allocate_mem(int ***ptr){ 
    *ptr = new int*[1]; 
    (*ptr)[0] = new int[1]; 
} 

public: 

A(){ 
    allocate_mem(&m1); 
    m1[0][0] = 1; 
    allocate_mem(&m2); 
    m2[0][0] = 1; 
} 

//I need a method that change m2 (according to the value of m2) without changhig the value of m2 
//this following doesn't work 
A renew(){ 
    if(m1[0][0]>0) 
     m2[0][0] = 1000; 
} 

~A(){ 
    delete[] m1[0]; 
    delete[] m1; 
    delete[] m2[0]; 
    delete[] m2;  
} 

void create_output(){ 
    cout << m1[0][0] << endl << m2[0][0] << endl; 
} 

}; 
+4

Изменение 'm2' без изменения' m2'? – timrau

+2

О чем вы говорите ?! –

+4

О боже. Это может быть еще одна запись IOCCC. Используя '[0]' для разыменования указателя и без дескрипторов дескрипторов, мы находимся в C и ... urgh. Я выхожу. –

ответ

0

Изменить A renew() в void renew() и код работает ,

#include<iostream> 
using namespace std; 

class A{ 
private: 

int **m1; 
int **m2; 

void allocate_mem(int ***ptr){ 
    *ptr = new int*[1]; 
    (*ptr)[0] = new int[1]; 
} 

public: 

A(){ 
    allocate_mem(&m1); 
    m1[0][0] = 1; 
    allocate_mem(&m2); 
    m2[0][0] = 1; 
} 

//I need a method that change m2 (according to the value of m1) without changhig the value of m1 
void renew(){ 
    if(m1[0][0]>0) 
     m2[0][0] = 1000; 
} 

~A(){ 
    delete[] m1[0]; 
    delete[] m1; 
    delete[] m2[0]; 
    delete[] m2; 
} 

void create_output(){ 
    cout << m1[0][0] << endl << m2[0][0] << endl; 
} 

}; 

int main(){ 
    A mat; 
    mat.create_output(); 
    mat.renew(); 
    mat.create_output(); 

    return 0; 
} 

Это дает:

1 
1 
1 
1000 
Смежные вопросы