c++改错题

guocai_yao 2009-01-04 09:06:43

//要求:不改变程序结构,在出错行的行首做一标记*,并将该多最少的正确语句下载所在行下放或者出错部位的右侧
#include<iostream>
using namespace std;

class A
{
int i;
public:
A(int x = 0):i(x){}
virtual int get(){return i;}
//
//
};

class B:public A
{
public:
B(int x = 1):A(x){}
void operator!(){cout<<"i = "<<get()<<endl;}
//
//
};
class C:public B
{
int i;
public:
C(int x = 2, int y):B(x),i(y){}
int operator+=(A &x){return i+=x.get();}
int get(){return i;}
};

int main()
{
A &p1 = *(A *)new B();
A &p2 = *(A *)new C(10);
!*p1;
cout<<"p2{i}="<<(p2+=p1)<<endl;
cout<<"p2{i}="<p2.get()<<endl;
return 0;
}

//新手,谢谢
...全文
450 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
speeder53 2009-01-05
  • 打赏
  • 举报
回复
mk
guocai_yao 2009-01-05
  • 打赏
  • 举报
回复
对不起大家了,等我分挣够了再来结贴哈囧
guocai_yao 2009-01-04
  • 打赏
  • 举报
回复
12楼正解
lnever 2009-01-04
  • 打赏
  • 举报
回复
呵呵,楼主的意思很多人没有看清。
要声明借口或者重载运算符。
照楼主最后的代码,
应该是A声明+重载运算符,和get函数,
B重载+运算符和get函数。
bfhtian 2009-01-04
  • 打赏
  • 举报
回复
mark
xiaoyisnail 2009-01-04
  • 打赏
  • 举报
回复

#include<iostream>
using namespace std;
class A
{
int i;
public:
A(int x = 0):i(x){}
virtual int get(){return i;}
virtual A& operator*(){return *this;}
virtual void operator!(){}
virtual int operator+=(A &x){return i+=x.get();}
};
class B:public A
{
public:
B(int x = 1):A(x){}
void operator!(){cout<<"i = "<<get()<<endl;}
B& operator*(){return *this;}
};
class C:public B
{
int i;
public:
C(int x = 2, int y):B(x),i(y){}

int operator+=(A &x)
{
return i+=x.get();
}
int get()
{
return i;
}
};


int main()
{
A &p1 = *(A *)new B();
A &p2 = *(A *)new C(10, 10);
!*p1;//要求显示的结果为i = 1;
cout<<"p2{i}="<<(p2+=p1)<<endl;//要求显示结果为p2{i} = 11;
cout<<"p2{i}="<<p2.get()<<endl;//要求显示结果为p2{i} = 11;
return 0;
}

xiaoyisnail 2009-01-04
  • 打赏
  • 举报
回复

#include<iostream>
using namespace std;
class A
{
int i;
public:
A(int x = 0):i(x){}
virtual int get(){return i;}
virtual void operator!(){}
virtual int operator+=(A &x){return 0;}
};
class B:public A
{
public:
B(int x = 1):A(x){}
void operator!(){cout<<"i = "<<get()<<endl;}
//
//
};
class C:public B
{
int i;
public:
C(int x = 2, int y=0):B(x),i(y){}

int operator+=(A &x)
{
return i+=x.get();
}
int get()
{
return i;
}
};


int main()
{
A &p1 = *(A *)new B();
A &p2 = *(A *)new C(10, 10);
!p1;//要求显示的结果为i = 1;
cout<<"p2{i}="<<(p2+=p1)<<endl;//要求显示结果为p2{i} = 11;
cout<<"p2{i}="<<p2.get()<<endl;//要求显示结果为p2{i} = 11;
return 0;
}

guocai_yao 2009-01-04
  • 打赏
  • 举报
回复

#include<iostream>
using namespace std;

class A
{
int i;
public:
A(int x = 0):i(x){}
virtual int get(){return i;}
//还要加代码
//还要加代码
};

class B:public A
{
public:
B(int x = 1):A(x){}
void operator!(){cout<<"i = "<<get()<<endl;}
//还要加代码
//还要加代码
};
class C:public B
{
int i;
public:
C(int x = 2, int y):B(x),i(y){}
int operator+=(A &x){return i+=x.get();}
int get(){return i;}
};

int main()
{
A &p1 = *(A *)new B();
A &p2 = *(A *)new C(10);
!*p1;//要求显示的结果为i = 1;
cout<<"p2{i}="<<(p2+=p1)<<endl;//要求显示结果为p2{i} = 11;
cout<<"p2{i}="<p2.get()<<endl;//要求显示结果为p2{i} = 11;
return 0;
}
guocai_yao 2009-01-04
  • 打赏
  • 举报
回复

#include<iostream>
using namespace std;

class A
{
int i;
public:
A(int x = 0):i(x){}
virtual int get(){return i;}
virtual void operator!() = 0;
virtual int operator+=() = 0;
};

class B:public A
{
public:
B(int x = 1):A(x){}
void operator!(){cout<<"i = "<<get()<<endl;}
int operator+=(A &x){return i+=x.get();}
};
class C:public B
{
int i;
public:
C(int y, int x = 2):B(x),i(y){}
int operator+=(A &x){return i+=x.get();}
int get(){return i;}
};

int main()
{
A &p1 = *(A *)new B();
A &p2 = *(A *)new C(10);
!(B&)p1;
cout<<"p2{i}="<<(((C&)p2)+=p1)<<endl;
cout<<"p2{i}="<<(C&)p2.get()<<endl;
return 0;
}

有同学这样改的,也是不对,大概这个意思
ltc_mouse 2009-01-04
  • 打赏
  • 举报
回复
不知道算不算改动最少,修改放在了屏蔽的代码下方

class C:public B
{
int i;
public:
///C(int x = 2, int y):B(x),i(y){}
C(int y, int x = 2):B(x),i(y){}
int operator+=(A &x){return i+=x.get();}
int get(){return i;}
};

int main()
{
A &p1 = *(A *)new B();
A &p2 = *(A *)new C(10);
///!*p1;
!( dynamic_cast<B&>(p1) );

///cout<<"p2{i}="<<(p2+=p1)<<endl;
cout<<"p2{i}="<<(dynamic_cast<C&>(p2)+=p1)<<endl;
cout<<"p2{i}="<p2.get()<<endl;
return 0;
}
guocai_yao 2009-01-04
  • 打赏
  • 举报
回复

cout<<"p2{i}="<<(p2+=p1)<<endl;//要求显示结果为p2{i} = 11;
cout<<"p2{i}="<p2.get()<<endl;//要求显示结果为p2{i} = 11;


楼上的程序结构已经发生了改变

*p2+=*p1;
帅得不敢出门 2009-01-04
  • 打赏
  • 举报
回复
错误比较多,
不改结构是不行的。
使用上也有问题。
guocai_yao 2009-01-04
  • 打赏
  • 举报
回复
楼上的改后还是报错
帅得不敢出门 2009-01-04
  • 打赏
  • 举报
回复

#include<iostream>
using namespace std;

class A
{
int i;
public:
A(int x = 0):i(x){}
virtual int get(){return i;}
//
//
};

class B:public A
{
public:
B(int x = 1):A(x){}
void operator!(){cout<<"i = "<<get()<<endl;}
//
//
};
class C:public B
{
int i;
public:
C(int x = 2):B(x),i(x){}
int operator+=(A &x){return i+=x.get();}
int get(){return i;}
};

int main()
{
B *p1 = new B();
C *p2 = new C(10);
!*p1;
*p2+=*p1;
cout<<"p2{i}="<<p2->get() << endl;
return 0;
}
elegant87 2009-01-04
  • 打赏
  • 举报
回复

int main()
{
A &p1 = *(A *)new B();
C &p2 = *(C *)new C();
!&p1;
cout<<"p2{i}="<<(p2+=p1)<<endl;
cout<<"p2{i}="<<p2.get()<<endl;
system("pause");
return 0;
}
guocai_yao 2009-01-04
  • 打赏
  • 举报
回复
就是这段程序有错误;//地方缺少语句,改完后程序能运行就行

//要求:不改变程序结构,在出错行的行首做一标记*,并将该多最少的正确语句下载所在行下放或者出错部位的右侧
#include<iostream>
using namespace std;

class A
{
int i;
public:
A(int x = 0):i(x){}
virtual int get(){return i;}
//
//
};

class B:public A
{
public:
B(int x = 1):A(x){}
void operator!(){cout<<"i = "<<get()<<endl;}
//
//
};
class C:public B
{
int i;
public:
C(int x = 2, int y):B(x),i(y){}
int operator+=(A &x){return i+=x.get();}
int get(){return i;}
};

int main()
{
A &p1 = *(A *)new B();
A &p2 = *(A *)new C(10);
!*p1;//要求显示的结果为i = 1;
cout<<"p2{i}="<<(p2+=p1)<<endl;//要求显示结果为p2{i} = 11;
cout<<"p2{i}="<p2.get()<<endl;//要求显示结果为p2{i} = 11;
return 0;
}
xiaoyisnail 2009-01-04
  • 打赏
  • 举报
回复
看不懂你的要求,也看不懂你的代码想做什么

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧