我读到,因为朋友函数不是一个成员函数,所以它永远不会被继承。我想下面的代码继承和朋友函数在C + +
#include <iostream>
#include <string>
using namespace std;
class Base {
char *m_str;
public:
Base(void): m_str("Base Default") { }
friend ostream & operator<<(ostream & , const Base &);
};
ostream & operator<<(ostream &os , const Base &b) {
os << "Base String : " << b.m_str << endl;
return os;
}
class Derived : public Base {
char *m_dstr;
public:
Derived(void): Base(), m_dstr("Derived Default") { }
};
int main(void) {
Derived obj3;
cout << obj3;
return 0;
}
和O/P是: - 基础线:基本的默认
我的理解是,我应该在编译时已经得到了错误。但我认为它的工作原因是编译器内部使用派生对象作为基类引用。这个理由是正确的吗?
请注意,我直接分配的字符串常量地址指针,而不是复制串入动态分配的内存。这只是为了实验目的:对
尝试使用非朋友的非会员功能。 – juanchopanza
“朋友函数不是成员函数,所以它永远不会被继承”。这相当具有误导性。好友功能只是一个功能,可以像任何其他功能一样调用。友谊只在功能主体内部起作用。 –
“将字符串文字地址指向指针而不是将字符串复制到动态分配的内存”:您不需要复制文字字符串,但应该使用'const char *'而不是'char *'。 – Jarod42