#1
by C++わからへん » 5年前
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
using namespace std;
class myclass {
int *p, x;
public:
myclass(int i, int n = 0);
myclass(const myclass &o, int n = 0);
~myclass() { delete p; }
friend int getval(myclass o);
friend int f1(myclass o);
myclass f2();
};
myclass::myclass(int i, int n)
{
cout << "通常のコンストラクタ呼び出し\n";
p = new int;
if (!p) {
cout << "メモリ割り当てエラー\n";
exit(1);
}
*p = i;
x = n;
}
myclass::myclass(const myclass &o, int n)
{
cout << "コピーコンストラクタ呼び出し\n";
p = new int;
if (!p) {
cout << "メモリ割り当てエラー\n";
exit(1);
}
*p = *o.p;
x = n;
}
int getval(myclass o)
{
return *o.p;
}
int f1(myclass o)
{
cout << "オブジェクトを受け取る\n";
return o.x;
}
myclass myclass::f2()
{
cout << "オブジェクトを返す\n";
myclass c(3);
return c;
}
int main()
{
myclass a(1), b(2);
cout << getval(a) << " " << getval(b);
cout << "\n";
cout << f1(a) << " " << f1(b);
cout << "\n";
a = a.f2();
b = b.f2();
cout << getval(a) << " " << getval(b);
cout << "\n";
cout << f1(a) << " " << f1(b);
cout << "\n";
return 0;
}
上のプログラムでオブジェクトを返す関数f2でa,bにcを代入して、getvalで3を表示したいのですが、実行するとマイナスがついた大きな数字が表示されます。代入する前のgetvalは1 2と正しく表示されます。どこをどう直すべきでしょうか。
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
using namespace std;
class myclass {
int *p, x;
public:
myclass(int i, int n = 0);
myclass(const myclass &o, int n = 0);
~myclass() { delete p; }
friend int getval(myclass o);
friend int f1(myclass o);
myclass f2();
};
myclass::myclass(int i, int n)
{
cout << "通常のコンストラクタ呼び出し\n";
p = new int;
if (!p) {
cout << "メモリ割り当てエラー\n";
exit(1);
}
*p = i;
x = n;
}
myclass::myclass(const myclass &o, int n)
{
cout << "コピーコンストラクタ呼び出し\n";
p = new int;
if (!p) {
cout << "メモリ割り当てエラー\n";
exit(1);
}
*p = *o.p;
x = n;
}
int getval(myclass o)
{
return *o.p;
}
int f1(myclass o)
{
cout << "オブジェクトを受け取る\n";
return o.x;
}
myclass myclass::f2()
{
cout << "オブジェクトを返す\n";
myclass c(3);
return c;
}
int main()
{
myclass a(1), b(2);
cout << getval(a) << " " << getval(b);
cout << "\n";
cout << f1(a) << " " << f1(b);
cout << "\n";
a = a.f2();
b = b.f2();
cout << getval(a) << " " << getval(b);
cout << "\n";
cout << f1(a) << " " << f1(b);
cout << "\n";
return 0;
}
上のプログラムでオブジェクトを返す関数f2でa,bにcを代入して、getvalで3を表示したいのですが、実行するとマイナスがついた大きな数字が表示されます。代入する前のgetvalは1 2と正しく表示されます。どこをどう直すべきでしょうか。