注册 登录
编程论坛 C++教室

一个与重载有关的继承问题

thlgood 发布于 2013-04-17 15:47, 575 次点击
程序代码:

#include <iostream>
using namespace std;

class base
{
public:
    void swap(int& a, int& b)
    {
        int tmp = a;
        a = b;
        b = tmp;
    }

};
class de: public base
{
    void swap(double& a, double& b)
    {
        double tmp = a ;
        a = b;
        b = tmp;
    }
    using base::swap(int&, int&);
};

int main()
{
    int a = 2;
    int b = 3;
    de *p = new de();
    p->swap(a, b);

    return 0;
}


程序很简单,就一个swap,我想,如何让基类中的swap(int&, int&)能够在派生类中被用上。

以上代码编译的错误信息为:
程序代码:

d.cpp:23:21: 错误:expected ‘;’ before ‘(’ token
     using base::swap(int&, int&);
                     ^
d.cpp:23:22: 错误:expected unqualified-id before ‘int
     using base::swap(int&, int&);
                      ^
d.cpp:23:22: 错误:expected ‘)’ before ‘int
d.cpp: 在函数‘int main()’中:
d.cpp:7:10: 错误:‘void base::swap(int&, int&)’无法访问
     void swap(int& a, int& b)
          ^
d.cpp:31:17: 错误:在此上下文中
     p->swap(a, b);
4 回复
#2
zhuxiaoneng2013-04-17 15:56
using base::swap(int&, int&);应该写为
 using base::swap;
另外,需要public:

using好像只能引入一个名称或者命名空间

[ 本帖最后由 zhuxiaoneng 于 2013-4-17 16:02 编辑 ]
#3
peach54602013-04-17 16:39
void swap(double& a, double& b)
    {
        base::swap(a, b);
    }
#4
邓士林2013-04-17 20:56
public和protected函数可以直接调用。如果被重载了可以使用 “基类::函数” 这样的形式调用如果是private就不行了,除非在基类友元自己
#5
马小柯2013-04-18 15:28
#include <iostream>
 using namespace std;
class base
 {
 public:
     void swap(int &a, int &b)
     {
         int tmp = a;
         a = b;
         b = tmp;
     }
 
};
 class de: public base
 {
     public:
     void swap(double &a, double &b)
     {
         double tmp = a ;
         a = b;
         b = tmp;
     }
 };
 
int main()
 {
     int a = 2;
     int b = 3;
     de *p=new de;
     p->base::swap(a,b);
     cout<<a<<","<<b<<endl;
     delete p;
    return 0;
 }
1