是否可以在没有子类的情况下为某个类添加一些功能?
问题描述:
在Ojective-C中有一些称为Categories的类别,允许用户从原始.h或.m文件(objective-c的.cpp版本)之外添加方法。我想知道在C++中是否存在这样的功能。是否可以在没有子类的情况下为某个类添加一些功能?
我特别想实现< <运算符用于调试,也可能是我经常使用的库中的其他类。 (并且不想使用宏,因为它看起来很丑;))
谢谢。
答
你总是可以重载班级以外的操作员。
std::ostream& operator<< (std::ostream& f, const YourClass& cls) {
...
}
你仍然需要friend
这个功能,如果它需要访问YourClass的私有成员。
(但它不是可以定义像什么Objective-C的不正常的成员函数)。
答
是的,这是可以添加的过载操作之类的< <外:
ostream& operator <<(ostream& lhs, const SomeClass& rhs) {
/* Output something to lhs using rhs object */
return lhs;
}
唯一的问题是该函数不能访问SomeClass的private/protected成员;要做到这一点,你必须在类中声明这个函数friend
。但是,如果您通过公共界面获得所有必需的信息,那么这不是问题。
答
是的,Namespace principle几乎与此类似。这个想法是在与类相同的命名空间的类之外有紧密相关的类操作。操作符重载为@KennyTM建议是这一原则尘(我看它的方式)
意向
代表行动是 执行上对象 结构的元素。访问者可让您定义 新操作,而无需更改 运行的元素的类别 。
只需添加Extraction(>>)和Insertion( 2010-10-06 09:04:52
+1澄清:“不可能定义正常的成员函数” – nacho4d 2010-10-06 09:06:14
@Als:只有因为我们的自定义类在右边,才能通过成员函数重载'''和' kennytm 2010-10-06 09:11:52