【问题标题】:casting struct from c into c++ class将结构从 c 转换为 c++ 类
【发布时间】:2016-09-10 21:45:15
【问题描述】:

我在 c 中有一个结构

struct account 
{
   int account_number;
   char *name;
   float balance;
};

然后我在 C++ 中有不同的代码,它链接到 c 代码。我有课

class Account
{
  // some functions ...
  void print()
  {
    std::cout<<"bal-bla-bla"<< account<< std::end; 
  }

   private:
     int account_number;
     char *name;
     float balance;
};

是否可以将结构中的信息转换为类?最好的方法是什么? 谢谢!

【问题讨论】:

  • 您应该让class Account 拥有account 类型的私有成员,而不是重复这些项目。然后就可以使用赋值运算符了。

标签: c++ c class struct


【解决方案1】:

从 C 结构派生您的类。 然后你继承数据成员,你只需要添加方法。

class Account:
   struct account {
  ...
  void print( void ) {
     ....
  }
};

【讨论】:

  • 不能这样做,因为struct和class在不同的库中,一般应该是独立的...
  • 在您的 .cpp 文件中,您肯定可以包含来自 .c 结构的头文件并链接到基于 C 的库吗? (我的意思是:Account 类和 account 结构可以在单独的文件中就好了)
  • 库 A:包含类 Account 的 c++ 库 - 不能接触类,只需使用它们。 libraryB: 具有结构 Account 的 c 库 - 那里不能碰任何东西。我的文件:包括lib A,lib B,从lib B获取有关帐户的信息并传递到lib A并对信息进行一些操作......
  • 如果我理解正确,你不是自己写的 C++ 类吗?这不是你的代码吗?如果这是真的,那么你无能为力。
  • 不,如果您依赖第三方代码,那么您无能为力,只能坚持使用该代码所提供的功能。
【解决方案2】:

我会在类中添加一个转换构造函数:

Account::Account(const account& a){
    account_number = a.account_number;
    name = a.name;
    balance = a.balance;
}

这意味着您将能够使用account,而您的程序的其余部分则需要Account。下一个最简单的方法是编写一个函数在类型之间进行转换,如果您无法更改 Account 的实现,您可能会这样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 2014-06-27
    • 1970-01-01
    • 2015-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多