簡體   English   中英

在C ++中創建分配對象

[英]Creating an assigning an object in 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. } 

我可以做這樣的事情嗎?

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"); 我知道這很愚蠢,但是沒有指針我該怎么辦。

  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 } 

不要以為C ++對象是OOP或Java。 例子不是引用。 它是對象本身。 之所以存在,是因為它已被貼花。

如果可以為定義為空的對象定義“狀態”,則檢查空值(或使其為空)可能很有意義。

bor示例,您可以定義一個

explicit operator bool() const方法,當對象成員具有您定義的表示“非空示例”的值時,返回true。

此時檢查null Example actualexampleif(!actualexample)

另一種選擇是使用Null Object Pattern Null Object Pattern基本上允許yo返回您標識為null的完全構造的對象。

鏈接的Wikipedia文章中的示例提供了一個實際的示例:

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() { }
};

請記住,執行諸如創建特定的“ Null對象”(即,定義全局Example kNullExample;某處)之類的方法不是一個好的解決方案,因為如果您將其分配給另一個Example對象(即Example newObject = kNullExample; ),將無法標識對象不再為null的事實。

另一種選擇是將布爾值存儲在對象中的某個位置,然后編寫“ IsNull()”函數。 只有當您無法使類成為虛擬類(例如,映射二進制文件)或您真的負擔不起虛擬表跳轉時,這才是真正的解決方案。

您不能以這種方式分配NULL指針,因為返回對象不是指針。 如果您不想使用指針,則可能的選擇是使用特定的NULL Example對象。 我的意思是,如果您認為對象實例為NULL,請使用此類的自定義屬性進行檢查。 可能是您可以使用構造函數中傳遞的空字符串:

exampleNull = Example example(""); 

並檢查字符串屬性以驗證您的“空”對象

但是請記住:只能將NULL分配給指針類型

無需創建返回值的方法,只需重寫操作符== ,然后在此處進行控制,因此,如果執行if(example ==NULL) ,則該控件的重載方法將返回所需的布爾值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM