2010-01-28 1 views
1

Позвольте мне рассмотреть следующий пример!Возможно ли создать объект класса с использованием нового оператора внутри пространства имен?

namespace nSpace { 
    class Addition { 
    int val1; 
    int val2; 
    public: 
    Addition(int firstVal, int secondVal) { 
     this.val1 = firstVal; 
     this.val2 = secondval; 
    } 
    void sum() { 
     cout<<"sum of val1 and val2 = " <<this.val1 + this.val2<<"\n"; 
    } 
    }; 

    Addition Addobj = new Addition(2, 3); // Is it possible ? if not, any other way ? 
    Addobj.sum(); 
} 

Если нет, сообщите мне причину.

Спасибо!

+5

Я предполагаю, что он использует Java или C# для возрастов и теперь имеет проблемы с перемещением на C++. – sharptooth

ответ

0

да Можно, только объекты на уровне пространства имен можно, но вы не можете иметь исполняющее заявление,

Addition Addobj = Addition(2, 3); // Is valid 
Addobj.sum(); //not valid 
//You got few error, below is working code 
namespace nSpace { 
    class Addition { 
    int val1; 
    int val2; 
public: 
    Addition(int firstVal, int secondVal) { 
    this->val1 = firstVal; 
    this->val2 = secondVal; 
    cout<<"sum of val1 and val2 = "; 
    } 
    void sum() { 
    cout<<"sum of val1 and val2 = " <<this->val1 + this->val2<<"\n"; 
    } 
    } ; 
Addition Addobj = Addition(2, 3); // Is it possible ? yes 
//Addobj->sum();// this does not work 

} 
void main() 
{ 

} 
-1

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

+0

Вам нужно прекратить использовать «ур», если вы хотите звучать разумно. :) – GManNickG

+0

На самом деле вы можете использовать новый оператор вне функции, если он является частью определения переменной. Вы действительно можете вызывать любой код произвольного кода вне функции, если он выполняется для определения переменной (например, 'time_t startup = time (0);' является законным вне функции). –

1

Это не Java, вам просто нужно линия

Addition Addobj(2, 3); 
0

Это юридическое вне функции:

Addition *Addobj = new Addition(2, 3); 

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

Это с другой стороны, не является законным вне функции

Addobj->sum(); // Illegal outside a function 

Причина в том, что это утверждение. Оба оператора и выражения являются законными внутри функции.

1

как rlbond сказал, или, если вы действительно хотите «быть новым» :)

nSpace::Addition &Addobj = *(new nSpace::Addition(2, 3)); 
Addobj.sum(); 
//don't forget to delete Addobj! (delete &Addobj;) 
Смежные вопросы