派生クラスに基底クラスを代入させたい。
派生クラスのインスタンスに関数の戻り値で持ってきた規定クラスのインスタンス?
を代入させていのですが、エラーが出てしまい対処に困ています、
ユーザー定義変換とはなんでしょうか?初学者のため初歩的なことかもしれませんが
教えてくれますでしょうか?
////////////////source.cpp部(header.h部は宣言しかしてないので記載しません)///
#include "conio.h"
#include <sstream>
#include "Header.h"
#include <iostream>
void C::view()const
{
cout << "name: " << name << "\n";
cout << "要素数: " << num << "\n";
for (int i = 0; i < num; i++)
{
cout << " [" << i << "]: "<<vec[i]<<endl;
}
cout << "\n\n";
}
/*コンストラクタ*/
C::C(int x = 0, string n = "no name") : num(x), vec(new int[x]), name(n)
{
for (int i = 0; i < num; i++)
{
vec[i] = i + 1;
}
}
/*コピoperator*/
C::C(const C& x)
{
cout << "コピーコンストラクタ\n";
if(this == &x)
{
num = 0;
vec = NULL;
}
else {
cout << "コピー\n";
num = x.num;
vec = new int[num];
for (int i = 0; i < num; i++)
{
vec[i] = x.vec[i];
}
}
}
/*代入コンストラクタ*/
C& C::operator = (const C& z)
{
cout << "代入operator\n";
if (this != &z)
{
if (num != z.num)
{
//cout << "代入\n";
delete[] vec;
num = z.num;
name = z.name;
vec = new int[num];
}
for (int i = 0; i < num; i++)
{
vec[i] = z.vec[i];
}
}
return *this;
}
/*ostream&*/
string C::to_string()const
{
ostringstream os;
os << "name: " << name<<"\n";
os << "要素数: " << num << "\n";
for(int i = 0; i<num; i++)
{
os << " [" << i << "]: " << vec[i]<<"\n";
}
os << "\n\n\n";
return os.str();
}
bool C::operator > (const C& x)
{
cout << "operator > \n";
if (num > x.num)
{
return true;
}
else {
return false;
}
}
bool C::operator <(const C& x)
{
if (num < x.num)
{
return true;
}
else {
return false;
}
}
ostream& operator <<(ostream& os, C& x)
{
os << x.to_string();
return os;
}
/*Cクラスの派生クラスD_C*/
D_C::D_C(int a = 0, string na = "no name[]",
int nn = 0,string na2 = "no name[][]")
:num(a),name(na),vec(new int[a]),C(nn,na2){
//cout << nn<<"\n";
for (int j = 0; j < num; j++)
{
vec[j] = j+1;
}
}
string D_C::to_string()const
{
stringstream os;
//os << "\n";
os << "C: " << C::num << " : " << C::name << "\n";
for (int i = 0; i < C::num; i++)
{
os << " [" << i << "]: " << C::vec[i] << "\n";
}
os << "D_C: " << num << " : " << name << "\n";
for (int i = 0; i < num; i++)
{
os << " [" << i << "]: " << vec[i] << "\n";
}
os << "\n\n";
return os.str();
}
ostream& operator<<(ostream& os, D_C& x)
{
os << x.to_string();
return os;
}
void D_C::view()
{
// size_t t1 = sizeof(C::vec) / sizeof(C::vec[0]);
// size_t t2 = sizeof(vec) / sizeof(vec[0]);
cout << "要素数C: " << C::num<<"\n";
for (int i = 0; i < C::num; i++)
{
cout << " [" << i << "]: " << C::vec[i] << "\n";
}
cout << "\n\n";
cout << "要素数D_C: " << num << "\n";
for (int i = 0; i < num; i++)
{
cout << " [" << i << "]: " << vec[i] << "\n";
}
cout << "\n";
}
////////////////int main部////////////////////////
#include "Header.h"
using namespace std;
D_C f()
{
return D_C(3,"function",6,"D_C f");
}
C ff()
{
return C(7,"function ff");
}
int main() {
D_C x(1,"Dc",2,"DC");
D_C d = ff();//適切のユーザー定義変換が存在しません。
d.view();
_getch();
return 0;
}