C++ 两个类相互转换并调用它们的函数

标签 c++ class oop casting

我有两个类。其中一个没有返回值和抛出值,另一个有返回类型但不抛出任何东西。我想要实现的是在彼此之间转换类并调用它们的函数,我可以调用函数时不使用静态方法。代码块示例;

  class ThrowableA{
        public:
            void getvalue();
    }

    class ReturnTypeA{
        public:
            int getvalue();
    }


    class BaseTypeA{//this will accept ThrowableA and ReturnTypeA
    ...
    };

    BaseTypeA * d = new ThrowableA();
    d->getvalue(); // this will call ThrowableA::getvalue
    (do something with d)->getvalue();//this will call ReturnTypeA::getvalue
    BaseTypeA * f = new ReturnTypeA();
    f->getvalue();//this will call ReturnTypeA::getvalue
    (do something with f)->getvalue();//this will call ThrowableA::getvalue

最佳答案

我认为您需要定义复制构造函数(或移动构造函数);或者,您可以定义转换运算符:

class ThrowableA : public BaseTypeA
{
    public:
        explicit ThrowableA(const ReturnTypeA& rt);
        void getvalue();
        // or explicit operator ReturnTypeA() const;
}

class ReturnTypeA : public BaseTypeA
{
    public:
        explicit ReturnTypeA(const ThrowableA& ta);
        int getvalue();
        // or explicit operator ThrowableA() const;
}

explicit 关键字表示只有在您的代码明确要求时才会发生转换。如果没有该关键字,该语言将在必要时自动执行最多一次转换,这可能会导致意外。 Bjarne Stroustrup's FAQ提到显式转换运算符;它显然是 C++11 的特性(而显式构造函数来自 C++03)。

来回转换不需要继承,但似乎与您想要的设置相匹配。

然后,要从一种转换为另一种,只需创建另一种类型的另一个对象:

ThrowableA ta;
// Work with ta, add data, etc.
ReturnTypeA ra(ta);
// Use ra.

关于C++ 两个类相互转换并调用它们的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24846362/

相关文章:

php - 自动重新排列图像的行

Python 2.7 : What does object. __setattr__ 在后台做什么?

java - 为什么私有(private)变量即使被调用不止一次也只增加一次

javascript - 在方法内交换变量

swift - 我的 API 应该是类、结构体还是协议(protocol)?

c++ - 如何复制数据?

c++ - Objective-C 中无法识别的函数

c# - 如何满足既可以为 null 也可以为空的对象

c++ - 奇怪的错误 char 的加密 (ascii)

java - 使用扫描仪读取文本文件时出现问题