gpt4 book ai didi

C++继承与构造函数、析构函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:04:06 37 4
gpt4 key购买 nike

//Parent.h
class Parent{
public:
Parent(){}
~Parent(){}
virtual void func1() = 0;
};

//Child.h
#include "Parent.h"
class Child : public Parent{
int x, y;
public:
Child() : Parent(){ //constructor

}
virtual void func1();
};

//Child.cpp
#include "Child.h"
void Child::Parent::func1(){

}

这编译很好,但是,我想将 Child 类的构造函数(和析构函数)的实现放在它的 cpp 文件中,这可能吗?怎么办?

我已经尝试了下面的代码,但它抛出了对 Child 虚表的 undefined reference

Child::Child() : Parent(){  //in the cpp
}

Child(); //in the header file
Child():Parent(); //also tried this one

最佳答案

你要做的几件事:

  • 保护发布您的头文件以防止意外的多重包含。
  • 使您的父析构函数成为虚拟的
  • 初始化您的非自动成员变量以确定值。

您的最终布局可能如下所示。

Parent.h

#ifndef PARENT_H_
#define PARENT_H_

class Parent
{
public:
Parent() {};
virtual ~Parent() {};

public:
virtual void func1() = 0;
};

#endif // PARENT_H_

Child.h

#ifndef CHILD_H_
#define CHILD_H_

#include "Parent.h"

class Child : public Parent
{
int x,y;

public:
Child();
virtual ~Child();

virtual void func1();
};
#endif

Child.cpp

Child::Child()
: Parent() // optional if default
, x(0), y(0) // always initialize members to determinate values
{
}

Child::~Child()
{
}

void Child::func1()
{
}

关于C++继承与构造函数、析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13578233/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com