构造函数调用

Constructor Calling

本文关键字:函数调用      更新时间:2023-10-16

我有一个名为Node的类。它包含两个私有数据。一个是字符串,另一个是Node指针。现在我有了这个类的构造函数,它将包含两个参数。一个是字符串,另一个是Node指针。

 class Node
    {
        private:
            string data;
            Node *P;
        public:
            Node(string s, Node* p)
            {
                data=s;
                P=p;
            }
            ~Node();
    };
    int main()
    {
        string str="";
        Node n(str, Node* P);
        return 0;
    }

这段代码有什么问题?,为什么?我想用这个默认构造函数声明一个对象,它的参数将是一个字符串和Node类指针。

我认为问题在于您错误地使用了默认构造函数的概念。默认构造函数不应该接受任何参数。下面是一个例子:

class Node
{
    private:
        string data;
        Node *P;
    public:
        Node()
        {
            data="";
            P=NULL;
        }
        ~Node();
};
int main()
{
    Node n();
    return 0;
}

我认为你应该多读一些c++语法

Node n(str, Node* P);

在第二个参数中使用了某种变量声明语法。那是不可能的。

你需要先声明P:

Node* P = NULL;
Node n(str,P);

但是现在的问题是,你的构造函数在这里取消引用P: p->P=NULL;,所以我们需要确保P实际上指向一个有效的Node。为此,我们必须首先创建Node,但问题是,要创建Node,我们需要一个有效的Node作为P的参数。因此,您根本不能创建Node s。

我不太明白你的意图,但是构造函数应该构造类的当前实例,而不是通过指针传递的其他对象。在Node(string s, Node* p)中,您希望用一些值填充数据成员dataP。既然你正在传递string s,我想将其分配给data,即data = s是有意义的。同样,似乎Node* p应该是指向当前节点的父指针,你想在P中安全,那么为什么不分配P = p呢?