使用Default Constructor从类中调用对象

时间:2014-10-16 18:46:29

标签: c++ default-constructor

我想知道对象的调用应该显示什么。我有一个名为big_number的类,它有一些不同的构造函数。在另一种方法中,我宣布一个对象' a'使用类big_number如下:

big_number a;

cout << "Default constructor gives " << a << endl;

我的构造函数是:

big_number::big_number()
{
    head_ptr = 0;
    tail_ptr = 0;
    positive = false;
    digits = 0;
    base = 10;
}

(虽然我确定这个构造函数是错误的。)

测试文件的完整代码:

    int main()
{
    int n1, n2;
    unsigned int base;
    string s;

    char choice;
    do
    {
        cout << "Type 'd' to test default constructor" << endl;
        cout << "Type 'i' to test int constructor" << endl;
        cout << "Type 's' to test string constructor" << endl;
        cout << "Type 'a' to test assignment" << endl;
        cout << "Type '>' to test input operator" << endl;
        cout << "Type '=' to test comparison operators" << endl;
        cout << "Type 'q' to quit" << endl;
        cin >> choice;

        if (toupper(choice) == 'D')
        {
            big_number a;
            cout << "Default constructor gives " << a << endl;
        }
//More Code

1 个答案:

答案 0 :(得分:1)

如果通过&#34;调用一个对象&#34;你的意思是你在对象operator<<上使用a作为流参数调用cout:它显示你要定义的任何内容(在big_number的成员函数中或一个免费的功能)。没有&#34;默认&#34; operator<<用于用户定义的类。所以,如果你定义它像

#include <iostream>

struct big_number
{
    template<typename T>
    friend T& operator<< (T& stream, const big_number& bn);
};

template<typename T>
T& operator<<(T& stream, const big_number& bn) {
    return (stream << "Hello World");
}

int main()
{
    big_number a;
    std::cout << a << std::endl;
}

...它只会显示&#34; Hello world&#34;。

使其成为friend函数的目的是它可以访问big_number的私有数据成员(因为您通常希望它显示取决于存储在对象中的数据的内容,以及不是常数&#34; Hello world&#34;)。因此,在operator<<定义中,您可能会遍历链接列表中的数字并将它们推送到流中(如果我正确理解您要执行的操作)。