在c ++中创建一个对象

时间:2013-05-04 14:13:15

标签: c++

您好我是c ​​++的新手,

我可以使用Example example("123")

创建一个新的类实例

我有两个问题

  1. 我知道我们无法检查对象是否为空if(example ==NULL),因为这不是指针,我们还有其他方法可以做到这一点。

  2. 我有一个返回对象的方法:如何返回null?

    Example get_Example() {
        if (example.getName().empty() {
            Example example("345");
            return example;
        }
        return NULL // i cannot return null.
    }
    
  3. 我可以这样做吗?

    Example get_Example() {
        Example example;
        if (example.getName().empty() {
            example = Example example("345"); 
            return example;
        }
        return NULL // i cannot return null. How 
    }
    

    example = Example example("345");我知道这很愚蠢但是如果没有指针我该怎么做呢。

5 个答案:

答案 0 :(得分:2)

  1. 使用指针Example *ex = NULL

  2. 构建默认null_example并重载==

    Example e;
    if (e == null_example) {
        e.init();
    }
    
  3. 但您可以提供is_init()功能。

    Example e;
    if (!e.is_init()) {
         e.init();
    }
    
  4. get_example可能是这样的:

    void get_example(Example &e) {
         // method2 or method3
    }
    

答案 1 :(得分:1)

不要将C ++对象视为OOP或Java。示例不是参考。它是对象本身。它之所以存在,是因为它已经被贴上了。

如果您可以为您定义为null的对象定义“状态”,则检查null(或使其为null)是有意义的。

例如你可以定义一个

explicit operator bool() const方法,当对象成员具有您定义的表示“非空示例”的值时返回true。

检查空Example actualexample,此时只是if(!actualexample)

答案 2 :(得分:1)

另一种选择是使用Null Object Pattern。 Null对象模式基本上允许yo返回一个您标识为null的完全构造的对象。

维基百科文章链接中的示例提供了一个很好的示例:

class animal 
{
public:
  virtual void make_sound() = 0;
};

class dog : public animal 
{
  void make_sound() { cout << "woof!" << endl; }
};

class null_animal : public animal 
{
  void make_sound() { }
};

记住做一些事情,比如创建一个特定的“空对象”(即在某处定义全局Example kNullExample;)并不是一个好的解决方案,因为如果你将它分配给另一个Example对象(即Example newObject = kNullExample;)你将无法识别对象不再为空的事实。

另一种选择是在对象的某处存储一个布尔值并编写一个“IsNull()”函数。这只是一个真正的解决方案,当你无法让你的类变为虚拟(例如映射二进制文件)或者你真的无法负担虚拟表跳转。

答案 3 :(得分:0)

您不能以这种方式分配NULL指针,因为返回对象不是指针。如果您不想使用指针,则posible选项可能是使用特定的NULL Example对象。我的意思是,如果对象实例是您认为的NULL,则使用此类的自定义属性进行检查。可能是你可以使用构造函数中传递的空字符串:

exampleNull = Example example(""); 

并检查字符串属性以验证“null”对象

但请记住:NULL只能分配给指针类型

答案 4 :(得分:0)

不是创建一个返回值的方法,而是简单地重写运算符==,并在那里进行控制,所以如果你执行if(example ==NULL),控件的重载方法将返回所需的布尔值。