下面的程序只是为了尝试继承,下面的代码工作得很好......直到我将“const”添加到继承类“pochodna”中的复制构造函数而不更改任何内容。这使得代码按以下方式更改(ofc,头文件中也进行了更改):
pochodna::pochodna(const pochodna & wzor): podstawowa(wzor) {
this->x=wzor.x;
this->y=wzor.y;
}
更改后编译器显示以下错误:
[Linker error] undefined reference to pochodna::pochodna(pochodna&)
.
当我将“const”添加到 operator= 参数使其成为 podstawowa& operator=( const podstawowa& obiekt) 时,也会发生同样的情况。你能告诉我为什么会这样吗?:)
podstawowa.h 类之一:
#ifndef PODSTAWOWA_H
#define PODSTAWOWA_H
#include <iostream>
using namespace std;
class podstawowa
{
private:
int alfa;
int beta;
const int staly;
public:
podstawowa(int=0, int=0);
podstawowa(const podstawowa& wzor);
~podstawowa();
podstawowa& operator=(podstawowa& obiekt);
ostream& operator<<(ostream &strumien);
};
#endif // PODSTAWOWA_H
Podstawowa.cpp
#include "podstawowa.h" // class's header file
#include <iostream>
using namespace std;
podstawowa::podstawowa(int alf,int bet): alfa(alf), beta(bet),staly(0)
{}
podstawowa::podstawowa(const podstawowa& wzor):staly(0){
this->alfa = wzor.alfa;
this->beta = wzor.beta;
}
podstawowa::~podstawowa()
{}
podstawowa& podstawowa::operator=( podstawowa& obiekt){
this->alfa = obiekt.alfa;
this->beta = obiekt.beta;
return *this;
}
ostream& podstawowa::operator<<(ostream &strumien){
strumien << "Alfa: ";
strumien << this->alfa;
strumien << "\n";
strumien << "Beta: ";
strumien << this->beta;
strumien << "\n";
return strumien;
}
另一个类,继承自 podstawowa:pochodna.h
#ifndef POCHODNA_H
#define POCHODNA_H
#include "podstawowa.h"
class pochodna : public podstawowa
{ private:
double x;
double y;
public:
pochodna(double=0, double=0);
pochodna(pochodna&);
~pochodna();
pochodna& operator=(pochodna&);
friend ostream& operator<<(ostream&, pochodna&);
};
#endif // POCHODNA_H
早熟禾.cpp
#include "pochodna.h" // class's header file
pochodna::pochodna(double iks, double ygr):podstawowa(), x(iks),y(ygr)
{}
pochodna::pochodna(pochodna & wzor): podstawowa(wzor) {
this->x=wzor.x;
this->y=wzor.y;
}
pochodna::~pochodna()
{}
pochodna& pochodna::operator=(pochodna& obiekt){
(*this).podstawowa::operator=(obiekt);
this->x=obiekt.x;
this->y=obiekt.y;
}
ostream& operator<<(ostream& strumien, pochodna& obiekt){
obiekt.podstawowa::operator<<(strumien);
strumien << "X: " << obiekt.x << "\nY: " << obiekt.y <<"\n";
return strumien;
}
主文件
#include <cstdlib>
#include <iostream>
#include "podstawowa.h"
#include "pochodna.h"
using namespace std;
int main(int argc, char *argv[])
{
pochodna pierwsza;
pochodna druga(0.123, 3.14);
cout << pierwsza << druga;
pierwsza = druga;
cout << "Po pierwsza = druga: \n";
cout << pierwsza << druga;
pochodna enta(druga);
cout<< "teraz enta \n" << enta;
system("PAUSE");
return EXIT_SUCCESS;
}