C++ c++;子类作为方法的参数
我想写两个类,在超类中,我需要方法witch作为参数,它有一个子类,如下面的示例代码所示:C++ c++;子类作为方法的参数,c++,class,parameters,subclass,C++,Class,Parameters,Subclass,我想写两个类,在超类中,我需要方法witch作为参数,它有一个子类,如下面的示例代码所示: class class1 { int a; void print(class2 k) { cout<<k.b*a; } }; class class2 :public class1 { public: int b; }; class1类 { INTA; 作废打印(2类k) { 不能使用前向声明并将实现移到类之外: clas
class class1
{
int a;
void print(class2 k)
{
cout<<k.b*a;
}
};
class class2 :public class1
{
public:
int b;
};
class1类
{
INTA;
作废打印(2类k)
{
不能使用前向声明并将实现移到类之外
:
class class2;
class class1
{
int a;
void print(class2 k);
};
class class2 :public class1
{
public:
int b;
};
您无法保持方法内联,因为您需要class2
的完整类型,而此时该类型不可用
但这里的主要问题是设计,这是错误的。为什么基类需要知道派生类中的方法,而更多的是调用这些方法?class2;
class class2;
class class1
{
int a;
inline void print(class2 &k); //pass by reference, but implemented after class2 is completely known to the compiler.
};
class class2 :public class1
{
public:
int b;
};
void class1::print(class2 &k)
{
cout<<k.b*a;
}
一班
{
INTA;
内联void print(class2&k);//按引用传递,但在编译器完全了解class2之后实现。
};
类别2:公共类别1
{
公众:
int b;
};
无效类别1::打印(类别2和k)
{
cout解决问题的一个可能方法不是在基类中实现print()
,而是强制任何继承类使用纯虚拟函数来实现它。目前,您可能会使用以下方法调用代码:
class2 c2;
c2.b = 20; // for example
class1 c1;
c1.print( c2 );
但也许更好的实施方法如下:
class class1
{
protected:
int a;
public:
virtual void print() const = 0;
};
class class2 : public class1
{
public:
int b;
void print() const;
};
void class2::print() const
{
cout << b * a;
}
当然,这可能对您想要做的事情没有帮助,但我认为这通常是解决您描述的问题的更好的方法。我的答案是错误的。我不知道在转发声明后您可以通过值传递。太好了!@Andrew我第一次确实有过疑问。非常感谢,我尝试过类似的方法,但感到困惑并继续犯错误;-)。为什么按引用传递?我的意思是你可以,但你不必。因为编译器在看到原型时必须至少知道参数wq的大小,而对于class2
它不能知道。但是它可以作为引用class2&
或指针class2*
。这是错误的,你只能用一个f来传递值orward声明。见我的答案。你真的想通过值传递这个东西吗?@johndilling我认为更好的问题是“你真的想将派生类传递给基类吗?”这是一个更好的问题,但你已经在回答中问过了。:)
class2 c2;
c2.b = 20; // for example
c2.print()