是否可以在命名空间内使用new运算符创建类的对象?

时间:2010-01-28 07:04:52

标签: c++

让我考虑以下例子!

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 个答案:

答案 0 :(得分:1)

这不是Java,你只需要行

Addition Addobj(2, 3);

答案 1 :(得分:1)

像rlbond说的那样,或者如果你真的想要“成为新人”:)

nSpace::Addition &Addobj = *(new nSpace::Addition(2, 3));
Addobj.sum();
//don't forget to delete Addobj! (delete &Addobj;)

答案 2 :(得分: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()
{

}

答案 3 :(得分:0)

这在函数之外是合法的:

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

因为它被认为是变量定义,它可以在函数之外完成(它将定义一个全局变量)。请注意,由于您使用的是new,因此变量的类型实际上必须是指针;

另一方面,这在功能之外是不合法的

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

原因是这是一个声明。语句和表达式在函数内部都是合法的。

答案 4 :(得分:-1)

您不能使用邮政编码。 原因很简单,你不在任何函数体内执行你的代码。 new()运算符和函数sum()不能在全局级别被称为lhs