如何在 C++ 中调用父类中的函数? [复制]
Posted
技术标签:
【中文标题】如何在 C++ 中调用父类中的函数? [复制]【英文标题】:How to call functions from parent class in C++? [duplicate] 【发布时间】:2020-11-20 08:10:20 【问题描述】:TL;DR
我有一个类,其中一些函数名与父类的函数冲突。 C++中如何从父类调用函数?
我的问题
我正在尝试创建一个具有流功能的类。所以,我从 std::basic_iostream
继承了我的课程。但是我的类有很多与基类冲突的功能。因此,我为流定义了一个专用类,并在主类中定义了一个返回流对象的函数。我以这种方式实现了主类的构造函数,因此它将在对象创建时创建流对象。我的代码是这样的:
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();
我尝试了什么
我试图将它添加到我的课程中,但它行为不端并且无法处理像 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);
【问题讨论】:
不要使用拥有裸指针。目前,您的课程会泄漏内存。 更详细地描述“无法处理”和“行为不端”。它的行为如何?相反,您的预期是什么? 创建具有流功能的类的常规方法是编写从std::streambuf
派生的类。所有 iostream 类都是不同 streambuf 派生类的包装器。如果您采用这种方法,您将“免费”获得所有 iostream 功能。
要确认约翰的声明,这里有一个链接,上面写得很好artofcode.wordpress.com/2010/12/12/deriving-from-stdstreambuf
@john @francis 我知道如何定义具有流功能的类。但我的问题是我的类中的许多函数与 basic_iostream
中定义的函数冲突。
【参考方案1】:
直接从父类调用函数很简单,如下:
std::stringstream myobj;
myobj << "Something..."
myobj.std::iostream::flush();
上面的示例直接从std::iostream
调用flush()
(这是std::basic_iostream<char>
的typedef)。也可以从父类的父类成员函数:
myobj.std::ostream::flush();
【讨论】:
以上是关于如何在 C++ 中调用父类中的函数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章