2016-08-27 5 views
0

私は自分のクラスのconstオブジェクトをインスタンス化し、メンバポインタをconstポインタから初期化する必要があります。それは可能ですか?どうやってするの?const値を使ってconstオブジェクトの非const属性を初期化する方法はありますか?

私は一種のようなものがあります:オブジェクト自体は一定であるかどうか

class A: 
    public Base 
{ 
public: 
    A(): 
     v(nullptr) 
    {} 

    virtual void f() override 
    {} 

private: 
    my_type *v; 

    friend void f(const my_type& orig) 
    { 
     // How to create a "const A" with "v == &orig" ? 
    } 
}; 

答えて

2

とそのクラスのメンバーのいずれかが一定であるかどうかを、2つの完全に独立したトピックです。

クラスのメンバーを特定の方法で初期化できるかどうかは、そのクラスの特定のインスタンスが定数であるかどうかに依存しません。

定数オブジェクトへのポインタを使用して、定数でないオブジェクトへのポインタを初期化することはできません。あなたのクラスのメンバ:

my_type *v; 

my_type自体は一定のタイプではないと仮定)非定数オブジェクトへのポインタです。

このように、このポインタは、定数オブジェクトを指すように初期化することはできません。

このメンバーを含むクラスのインスタンスが定数であるかどうかは、要素ではありません。

関連する問題