[英]Creating an assigning an object in c++
您好,我是C ++的新手,
我可以使用Example example("123")
創建類的新實例
我有兩個問題
我知道我們無法像if(example ==NULL)
那樣檢查對象是否為空,因為這不是指針,我們還有其他方法可以做到嗎?
我有一種返回對象的方法,例如:如何返回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");
我知道這很愚蠢,但是沒有指針我該怎么辦。
使用指針, Example *ex = NULL
。
構造一個默認的null_example
並重載==
Example e; if (e == null_example) { e.init(); }
但是您可以只提供一個is_init()
函數。
Example e; if (!e.is_init()) { e.init(); }
您的get_example
可能類似於:
void get_example(Example &e) { // method2 or method3 }
不要以為C ++對象是OOP或Java。 例子不是引用。 它是對象本身。 之所以存在,是因為它已被貼花。
如果可以為定義為空的對象定義“狀態”,則檢查空值(或使其為空)可能很有意義。
bor示例,您可以定義一個
explicit operator bool() const
方法,當對象成員具有您定義的表示“非空示例”的值時,返回true。
此時檢查null Example actualexample
是if(!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.