如何在 C++ 中从父 class 调用函数?
How to call functions from parent class in C++?
TL;DR
我有一个 class,其中一些函数名称与父 class 的函数冲突。如何在 C++ 中从父 class 调用函数?
我的问题
我正在尝试制作具有流功能的 class。所以,我从 std::basic_iostream
继承了我的 class 。但是我的 class 有很多功能与基础 class 冲突。因此,我为流定义了一个专用的 class,并在主 class 中定义了一个函数,它将 return 流对象。我以这种方式实现了 main class 的构造函数,因此它将在创建对象时创建流对象。我的代码是这样的:
class mystream : public std::basic_iostream<char> {
...
};
class myclass {
protected:
mystream* stream;
public:
myclass() {
stream = new mystream(args);
}
mystream& io() {
return (*stream);
}
};
我现在想做什么
当我使用 io
成员访问流时效果很好,但我想使用 <<
和 >>
运算符而不调用 io
成员和任何成员函数mystream
和 io
成员。现在我必须像这样访问流:
myclass object;
object.io() << "Some output";
object.io().flush();
但我想通过 io
函数直接从对象和 mystream
的任何成员访问 <<
和 >>
运算符,如下所示:
myclass object;
object << "Some output";
object.io().flush();
我试过的
我试图将它添加到我的 class,但它运行不正常,无法处理像 std::endl
:
这样的 IO 操纵器
template <typename type>
std::ostream& operator << (type data) {
return ((*stream) << data);
}
template <typename type>
std::istream& operator >> (type &data) {
return ((*stream) >> data);
}
直接从父 class 调用函数很简单,如下所示:
std::stringstream myobj;
myobj << "Something..."
myobj.std::iostream::flush();
上面的示例直接从 std::iostream
(它是 std::basic_iostream<char>
的类型定义)调用 flush()
。也可以从父 class of parent class:
的成员函数
myobj.std::ostream::flush();
TL;DR
我有一个 class,其中一些函数名称与父 class 的函数冲突。如何在 C++ 中从父 class 调用函数?
我的问题
我正在尝试制作具有流功能的 class。所以,我从 std::basic_iostream
继承了我的 class 。但是我的 class 有很多功能与基础 class 冲突。因此,我为流定义了一个专用的 class,并在主 class 中定义了一个函数,它将 return 流对象。我以这种方式实现了 main class 的构造函数,因此它将在创建对象时创建流对象。我的代码是这样的:
class mystream : public std::basic_iostream<char> {
...
};
class myclass {
protected:
mystream* stream;
public:
myclass() {
stream = new mystream(args);
}
mystream& io() {
return (*stream);
}
};
我现在想做什么
当我使用 io
成员访问流时效果很好,但我想使用 <<
和 >>
运算符而不调用 io
成员和任何成员函数mystream
和 io
成员。现在我必须像这样访问流:
myclass object;
object.io() << "Some output";
object.io().flush();
但我想通过 io
函数直接从对象和 mystream
的任何成员访问 <<
和 >>
运算符,如下所示:
myclass object;
object << "Some output";
object.io().flush();
我试过的
我试图将它添加到我的 class,但它运行不正常,无法处理像 std::endl
:
template <typename type>
std::ostream& operator << (type data) {
return ((*stream) << data);
}
template <typename type>
std::istream& operator >> (type &data) {
return ((*stream) >> data);
}
直接从父 class 调用函数很简单,如下所示:
std::stringstream myobj;
myobj << "Something..."
myobj.std::iostream::flush();
上面的示例直接从 std::iostream
(它是 std::basic_iostream<char>
的类型定义)调用 flush()
。也可以从父 class of parent class:
myobj.std::ostream::flush();