簡體   English   中英

在類對象中初始化類對象 - C++

[英]Initialize a class object inside a class object - C++

如何從另一個類對象中初始化一個類對象。

class Dummy {
    public:
    Dummy() {}
};
class Server {
    public:
    string ip;
    string port;
    Dummy dummy; // <-- declare an object from within another object.
    public:
    Server(string port__, string ip__, Dummy dummy__) {
        port = port__;
        ip = ip__;
        dummy = dummy__;
    }
    void some_func() {
        // use dummy from here.
        dummy.hello_world();
    }
}

我想要做的是在整個對象服務器中使用對象 Dummy。

在您的情況下, Dummy有一個默認構造函數,因此您應該沒有問題按照您的方式進行操作。

您還可以使用 成員初始化列表,如下所示:

Server(string ip__, string port__, Dummy dummy__)
   : ip(ip__), port(port__), dummy(dummy__) 
{}

即使Dummy沒有默認構造函數,此方法也將起作用。

之后,您可以在Server類的任何地方使用dummy成員。 目前,您沒有在Dummy類中定義任何公共成員。
完成后,您可以在整個Server中使用: dummy.<some_public_member_of_Dummy>

旁注:

  1. 通過 const 引用將參數傳遞給Server構造函數會更有效,例如: Dummy const & dummy__
  2. 最好避免using namespace std - 請參閱此處為什么“使用命名空間 std;” 被認為是不好的做法? .

您可以在Server::Server(std::string, std::string, Dummy)構造函數初始化列表中初始化數據成員dummy ,如下所示:

class Server{
//other code here
    
Server(string port__, string ip__, Dummy dummy__)
//---------------------------vvvvvvvvvvvvvv----------->initialize dummy in constructor initializer list
    :port(port__), ip(ip__), dummy(dummy__) {
       
    }
};

工作演示

請注意,您的Dummy類沒有名為hello_world的成員函數,因此您不能在Dummy對象上調用該函數。

暫無
暫無

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

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