我有一个来自抽象类的派生类,我试图将它作为派生类的成员类的参数传递。我还有一个前瞻性声明问题。有什么建议吗?
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;
}
答案 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;
}