我从来没有用模板理解这个问题.对于我实例化一个方法,不同类型参数的多个类型与在函数重载方面实现相同.如果是这种情况,模板如何导致代码膨胀或超过二进制大小到某个限制.请带上清晰度!!
有时候,我是否应该考虑模板或函数重载.关于代码膨胀是我听说过的模板中的问题,但从未理解过.请解释一下.
class A
{
public:
void virtual magic() = 0;
void bar()
{
magic(); // this should be legal
}
};
class B: public A
{
public:
void magic()
{
cout<<"implement magic here"<<endl;
}
};
class C: public B
{
void foo()
{
magic(); // this should not be allowed, i.e. create compile-time error
}
};
Run Code Online (Sandbox Code Playgroud)
因此,该纯虚基类A的B应访问magic(),但不排除任何派生类C的B.这可以使用访问说明符和/或朋友声明或以任何其他方式实现吗?
有没有办法知道谁是对象的所有者?让我们说类A将类B的指针保存为数据成员.B有什么方法可以知道谁拥有他?
任何帮助对我来说都意味着很多.
class adapter
{
private:
adapter& operator= (adapter& j)
{
cout<<"i m here"<<endl;
}
adapter(adapter&)
{}
public:
adapter()
{}
};
int main()
{
adapter* p = new adapter;
adapter* q = new adapter;
p = q;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这里当q被赋给p时,它应该抛出编译时错误,因为我在私有部分重载了赋值运算符.但我的汇编很顺利.我在这里失踪或做错了什么?