能cout出‘A’吗?

Uron 2014-09-24 04:22:12
#include <iostream>
using namespace std;

class Test
{
public:
void Infor()
{
cout << "A" << endl;
}

void Infor(int a = 0)
{
cout << "B" << endl;
}
};
如何能输出A,或者结果是不可能输出A?知道是虚函数可以输出,不知道普通函数可以不可以。
...全文
354 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
-小仙- 2014-09-25
  • 打赏
  • 举报
回复
引用 13 楼 ForestDB 的回复:
参考9L给出的代码。
# include <iostream>

using namespace std;

class Test
{
public:
    void infor() { cout << "A" << endl; }
    void infor(int a = 0) { cout << "B" << endl; }
};

int main()
{
    typedef void (Test::*func)();
    func f = &Test::infor;
    Test a;
    (a.*f)();

    return 0;
}
好吧,这样确实可以,因为它转成了C调用了,不是C++调用;也就没有重载歧义了; error C2668: “Test::Infor”: 对重载函数的调用不明确 1> 可能是“void Test::Infor(int)” 1> 或 “void Test::Infor(void)” 实际开发中,不允许这样的代码存在!
ForestDB 2014-09-25
  • 打赏
  • 举报
回复
参考9L给出的代码。
# include <iostream>

using namespace std;

class Test
{
public:
    void infor() { cout << "A" << endl; }
    void infor(int a = 0) { cout << "B" << endl; }
};

int main()
{
    typedef void (Test::*func)();
    func f = &Test::infor;
    Test a;
    (a.*f)();

    return 0;
}
ForestDB 2014-09-25
  • 打赏
  • 举报
回复
# include <iostream>

using namespace std;

class Test
{
public:
    void infor() { cout << "A" << endl; }
    void infor(int a = 0) { cout << "B" << endl; }
};

int main()
{
    Test a;
    a.infor();

    return 0;
}
g++ -Wall a.cpp -o a a.cpp: In function ¡®int main()¡¯: a.cpp:15: error: call of overloaded ¡®infor()¡¯ is ambiguous a.cpp:8: note: candidates are: void Test::infor() a.cpp:9: note: void Test::infor(int)
aa5566f4 2014-09-25
  • 打赏
  • 举报
回复
學到真多阿
sg_knight 2014-09-25
  • 打赏
  • 举报
回复
函数重载有歧义呀。
-小仙- 2014-09-25
  • 打赏
  • 举报
回复
引用 16 楼 xusiwei1236 的回复:
[quote=引用 14 楼 Trueman_onlyme 的回复:] [quote=引用 13 楼 ForestDB 的回复:] 参考9L给出的代码。
# include <iostream>

using namespace std;

class Test
{
public:
    void infor() { cout << "A" << endl; }
    void infor(int a = 0) { cout << "B" << endl; }
};

int main()
{
    typedef void (Test::*func)();
    func f = &Test::infor;
    Test a;
    (a.*f)();

    return 0;
}
好吧,这样确实可以,因为它转成了C调用了,不是C++调用;也就没有重载歧义了; error C2668: “Test::Infor”: 对重载函数的调用不明确 1> 可能是“void Test::Infor(int)” 1> 或 “void Test::Infor(void)” 实际开发中,不允许这样的代码存在![/quote]
引用 14 楼 Trueman_onlyme 的回复:
[quote=引用 13 楼 ForestDB 的回复:] 参考9L给出的代码。
# include <iostream>

using namespace std;

class Test
{
public:
    void infor() { cout << "A" << endl; }
    void infor(int a = 0) { cout << "B" << endl; }
};

int main()
{
    typedef void (Test::*func)();
    func f = &Test::infor;
    Test a;
    (a.*f)();

    return 0;
}
好吧,这样确实可以,因为它转成了C调用了,不是C++调用;也就没有重载歧义了; error C2668: “Test::Infor”: 对重载函数的调用不明确 1> 可能是“void Test::Infor(int)” 1> 或 “void Test::Infor(void)” 实际开发中,不允许这样的代码存在![/quote] @Trueman_onlyme: typedef void (Test::*func)(); 是一个 member function pointer,C++特有的 @ForestDB: 什么编译器,能编过 &Test::info ?[/quote] 就是C++的成员函数转换为C版本的函数指针,归根结底是函数指针,而不是从对象引出的!
  • 打赏
  • 举报
回复
靠,你这样写,如果是普通函数的话,调用的时候Infor没带参数是会引发调用不明确的错误的,编译器不知道你到底要调用Infor()还是Infor(int a=0). 在类里的话,因为编译器是有一个什么优先设定,所以不会给你报错。
码工许师傅 2014-09-25
  • 打赏
  • 举报
回复
引用 14 楼 Trueman_onlyme 的回复:
[quote=引用 13 楼 ForestDB 的回复:] 参考9L给出的代码。
# include <iostream>

using namespace std;

class Test
{
public:
    void infor() { cout << "A" << endl; }
    void infor(int a = 0) { cout << "B" << endl; }
};

int main()
{
    typedef void (Test::*func)();
    func f = &Test::infor;
    Test a;
    (a.*f)();

    return 0;
}
好吧,这样确实可以,因为它转成了C调用了,不是C++调用;也就没有重载歧义了; error C2668: “Test::Infor”: 对重载函数的调用不明确 1> 可能是“void Test::Infor(int)” 1> 或 “void Test::Infor(void)” 实际开发中,不允许这样的代码存在![/quote]
引用 14 楼 Trueman_onlyme 的回复:
[quote=引用 13 楼 ForestDB 的回复:] 参考9L给出的代码。
# include <iostream>

using namespace std;

class Test
{
public:
    void infor() { cout << "A" << endl; }
    void infor(int a = 0) { cout << "B" << endl; }
};

int main()
{
    typedef void (Test::*func)();
    func f = &Test::infor;
    Test a;
    (a.*f)();

    return 0;
}
好吧,这样确实可以,因为它转成了C调用了,不是C++调用;也就没有重载歧义了; error C2668: “Test::Infor”: 对重载函数的调用不明确 1> 可能是“void Test::Infor(int)” 1> 或 “void Test::Infor(void)” 实际开发中,不允许这样的代码存在![/quote] @Trueman_onlyme: typedef void (Test::*func)(); 是一个 member function pointer,C++特有的 @ForestDB: 什么编译器,能编过 &Test::info ?
Uron 2014-09-25
  • 打赏
  • 举报
回复
9L的成员函数指针不错,呵呵。没有往这方面上想。
chencgln 2014-09-24
  • 打赏
  • 举报
回复
#include <iostream> using namespace std; class Test { public: void Infor() { cout << "A" << endl; } void Infor(int a = 0) { cout << "B" << endl; } }; class test1:public Test { public: using Test::Infor; void Infor() { cout << "1" << endl; } }; int main() { int a=0; test1 test; test.Infor(a); getchar(); } 我也问一下啊,像上面这样可以输出"B“,但是想输出A要怎么办到啊?
幻夢之葉 2014-09-24
  • 打赏
  • 举报
回复
引用 9 楼 passion_wu128 的回复:

typedef void (Test::*Func)();
Func f = &Test::Infor;
(Test().*f)();
passion_wu128 2014-09-24
  • 打赏
  • 举报
回复

typedef void (Test::*Func)();
Func f = &Test::Infor;
(Test().*f)();
幻夢之葉 2014-09-24
  • 打赏
  • 举报
回复
我不知道,但是我知道一定有方法做到。
Uron 2014-09-24
  • 打赏
  • 举报
回复
引用 1 楼 JoeBlackzqq 的回复:
只要输出语句正确,就能输出呀!奇葩
能给个输出‘A’的语句么?
Uron 2014-09-24
  • 打赏
  • 举报
回复
引用 4 楼 ForestDB 的回复:
这程序能编译过?
直接调用Infor()肯定不能过。类还是能编译过滴。
Uron 2014-09-24
  • 打赏
  • 举报
回复
引用 3 楼 Idle_ 的回复:
不能,编译过不了。
VS2010编译能过啊。别的没试。
ForestDB 2014-09-24
  • 打赏
  • 举报
回复
这程序能编译过?
阿呆_ 2014-09-24
  • 打赏
  • 举报
回复
不能,编译过不了。
微型蚂蚁 2014-09-24
  • 打赏
  • 举报
回复
超出了领悟范围。
JoeBlackzqq 2014-09-24
  • 打赏
  • 举报
回复
只要输出语句正确,就能输出呀!奇葩

64,648

社区成员

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

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