定义我自己的拷贝构造函数

时间:2015-02-24 05:48:33

标签: c++

我正在编写这个程序,我定义了一个class X并手动定义了它的构造函数和析构函数,这样我就可以在每个函数中都有一个print语句,看看它们何时被调用。

然而,问题似乎在于我对复制构造函数的定义。

它出现以下错误:

  

警告:将const X传递为this int X::getI()丢弃const

的参数

这个错误的原因是什么?

类的代码段:

class X {
    public:
        X() {
            cout << "Default Constructor called\n";
            i = 0;
        }
        X(int i) {
            cout << "Parameterized Constructor called\n";
            this->i = i;
        }
        X(const X& x) {
            cout << "Copy Constructor called\n";
            i = x.getI();
        }
        ~X() {
            cout << "Destructor called\n";
        }
        int getI() {
            return i;
        }
    private:
        int i;
};

3 个答案:

答案 0 :(得分:3)

您正试图通过const引用来调用非getI成员函数const。这是不允许的。由于getI不会修改this个对象,因此应将其声明为const

int
getI() const
{
  return this->i;
}

然后,您甚至可以通过const引用来调用它。

答案 1 :(得分:1)

getI()不是const成员函数。您不能在const的对象上调用它。在复制构造函数中,xconst对象。因此,您无法致电

x.getI();

getI()更改为const成员函数。

    int getI() const {
        return i;
    }

答案 2 :(得分:0)

#include <iostream> 

using namespace::std;


class X {
    public:
        X() {
            cout << "Default Constructor called\n";
            i = 0;
        }


        X(int i) {
            cout << "Parameterized Constructor called\n";
            this->i = i;
        }
        X(const X& x) {
            cout << "Copy Constructor called\n";
            i = x.getI();
        }
        ~X() {
            cout << "Destructor called\n";
        }
        int getI() const {
            return i;
        }
    private:
        int i;
};

int main()
{
}

这是正确的代码,你必须将getI作为const