2017-02-15 90 views
1

有人可以解釋我,如何使私有類變量超載? 我試圖在超載使用指針,但也許我應該使用的ostream &操作者< <(ostream的&出來,B & b)或ostream的&操作者< <(ostream的&出來,常量乙& B)?不能讓超載運算符<<與包含的私有類

#include <iostream> 
using namespace std; 

class B { 
    const int x = 5; 
public: 
    B(){} 
    ~B(){} 
    int get_x() { 
     return this->x; 
    } 
}; 
ostream& operator<<(ostream& out, B *b) { 
    return out << b->get_x(); 
} 

class A { 
    B b; 
public: 
    A(){} 
    ~A() {} 
    B get_b() { 
     return this->b; 
    } 
}; 
ostream& operator<<(ostream& out, A *a) { 
    return out; 
} 

int main(int argc, const char * argv[]) { 
    A *a = new A(); 
    cout << a << '\n'; 
    return 0; 
} 
+3

_「但我也許應該使用&或const&???」 _後者。 –

回答

3

你不應該用指針,你需要注意的常量性:

#include <iostream> 
using namespace std; 

class B { 
    const int x = 5; 
public: 
    B(){} 
    ~B(){} 
    int get_x() const { 
     return this->x; 
    } 
}; 
ostream& operator<<(ostream& out, const B & b) { 
    return out << b.get_x(); 
} 

class A { 
    B b; 
public: 
    A(){} 
    ~A() {} 
    B get_b() const { 
     return this->b; 
    } 
}; 
ostream& operator<<(ostream& out, const A & a) { 
    return out << a.get_b(); 
} 

int main() { 
    A a; 
    cout << a << '\n'; 
    return 0; 
} 
+0

Upvoted但我會刪除更多的OP的代碼。 ;-) –