【发布时间】:2016-05-16 05:15:50
【问题描述】:
在我的 C++ 程序中,我有单独的 .h 和 .cpp 文件,到目前为止一切正常,除非我想为派生类使用基类构造函数。它正在工作,但前提是我在类减速时放置函数定义。 这是 .h 文件的工作代码。
#include <iostream>
using namespace std;
class property
{
public:
property();
property(const property & src);
property(int src);
~property();
virtual int disp() const = 0;
int get_ownable();
private:
protected:
int ownable;
};
class rr : public property
{
public:
rr();
rr(const rr & src);
rr(int src):property(src)
{cout << "\nderived class was called\n";};
~rr();
virtual int disp() const;
private:
protected:
};
imp.cpp(实现)文件是
#include "head.h"
#include <iostream>
using namespace std;
//property class implimentations
property::property()
{
ownable = 0;
}
property::property(const property & src)
{
ownable = src.ownable;
}
property::property(int src)
{
ownable = src;
cout << "\nparent class called\n";
}
property::~property()
{
}
int property::get_ownable()
{
return ownable;
}
rr::rr()
{}
rr::rr(const rr & src)
{
ownable = src.ownable;
}
/*
rr::rr(int src):property(src)
{
cout << "\nderived class was called\n";
}
*/
rr::~rr()
{
}
int rr::disp() const
{
}
还有其他代码,但工作正常且未连接到此代码。输出是
parent class called
derived class was called
这样就可以了,但是如果我取消注释掉 .imp 文件中的函数并删除 .h 中的声明
rr(int src):property(src);
我得到了错误
head.h: IN constructor 'rr::rr(int)':
head.h 113: error: expeted '{' at end of input
imp.cpp: at global scope:
imp.cpp:348:error: redefiniton of 'rr::rr(int);
head.h.113: error: 'rr::rr(int); previousle defined here
我可以在网上找到的所有示例都使用类声明中定义的所有函数来执行此操作。我找不到任何关于如何使用 2 个文件进行操作的示例。谁能告诉我如何在单独的文件中定义基类构造函数调用? 我在使用 g++ 编译器的 Linux 系统上。
【问题讨论】:
-
构造初始化列表是实现的一部分,而不是声明。换句话说,它与构造函数体一起使用。您可以将两者都放入 .h 文件中,也可以将两者都放入 .cpp 文件中;你不能把它们分开。
标签: c++ class inheritance constructor derived-class