if 定义类A的对象duixiang else 定义类B的对象duixiang 异常
if 定义类A的对象duixiang else 定义类B的对象duixiang 错误
#include <iostream>
using namespace std;
class A
{
public:
void print(){cout<<"类A\n";}
};
class B
{
void print(){cout<<"类B\n";}
};
int main()
{
char choice;
cin>>choice;
if (choice=='a')
A duixiang;
else
B duixiang;
duixiang.print(); //为什么会错呢
return 0;
}
------解决方案--------------------
#include <iostream>
using namespace std;
class A
{
public:
void print(){cout<<"类A\n";}
};
class B
{
void print(){cout<<"类B\n";}
};
int main()
{
char choice;
cin>>choice;
if (choice=='a')
A duixiang;
else
B duixiang;
duixiang.print(); //为什么会错呢
return 0;
}
------解决方案--------------------
- C/C++ code
if (choice=='a') A duixiang;//这样定义只是在if else中才会有效。。。作用域就只是在if else中 else B duixiang;
------解决方案--------------------
- C/C++ code
#include <iostream> using namespace std; class A { public: void print(){cout<<"类A\n";} }; class B { public://这个必须加,print才能在主函数中调用,否则默认的是private void print(){cout<<"类B\n";} }; int main() { char choice; cin>>choice; if (choice=='a') { A duixiang; duixiang.print(); //这样就好了 } else { B duixiang; duixiang.print(); } return 0; }
------解决方案--------------------
因为你是在 if...else... 语句里才声明的“duixiang”,出了if...else...语句就出了这个变量的作用域了
- C/C++ code
#include <iostream> using namespace std; class BaseAB { public: virtual void print() = 0; }; class A : public BaseAB { public: void print(){cout<<"ÀàA\n";} }; class B : public BaseAB { void print(){cout<<"ÀàB\n";} }; int main() { char choice; cin>>choice; BaseAB* p_duixiang; if (choice=='a') { A duixiang; p_duixiang = &duixiang; } else { B duixiang; p_duixiang = &duixiang; } p_duixiang->print(); return 0; }