将基类作为派生的成员函数中的参数传递

时间:2016-02-12 15:47:03

标签: c++ inheritance forward-declaration

我有一个来自抽象类的派生类,我试图将它作为派生类的成员类的参数传递。我还有一个前瞻性声明问题。有什么建议吗?

class base;
void print(*base); 


class base {
public:
const int number = 5;
// ... virtual funcs etc.
};    

class derived:public base {
public:
void test() {
 print(&base); // I guess here is the mistake
};

void print(*base) {
 cout << base->number << endl;
}

4 个答案:

答案 0 :(得分:1)

只需print(this)(见online example)。你不能拿一个班级的地址。

答案 1 :(得分:0)

一个类是一种类型。类型没有addressess,只有变量。你似乎也缺乏对C ++的基本理解。

void print(*base); 

完全是胡说八道。你必须回到书本上。

答案 2 :(得分:0)

指向类对象的指针可以隐式转换为指向其基类的指针,因此您只需传递this并让标准转换发生:

void test() {
    print(this);
};

答案 3 :(得分:0)

  

我有一个来自抽象类的派生类,我正试图通过   它作为派生类的成员类的参数。我也有   前方申报问题。有什么建议吗?

你的前瞻声明错了。这是c ++,而不是去:

void print(base* pointerToBase);

是对的。除此之外,阿尔夫的答案是正确的。我宁愿使用指针的引用,并且因为print通常不会修改状态,所以使它成为const。然后你的代码变成:

class base {
public:
const int number = 5;
// ... virtual funcs etc.
};    

void print(const base&); 

class derived:public base {
public:
void test() {
 print(*this);
};

void print(const base& b) {
 cout << base.number << endl;
}