加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 我应该在哪里实现我的类方法?

发布时间:2020-12-16 05:43:00 所属栏目:百科 来源:网络整理
导读:我知道我的类方法有三种不同的实现“位置”: 1)定义我的类(.h文件)中的方法,并在.cpp文件中实现 //.hclass Foo{ int getVal() const;};//.cppint Foo::getVal() const{ return 0; } 2)定义并实现我的类(.h文件)中的方法. //.hclass Foo{ int getVal() const
我知道我的类方法有三种不同的实现“位置”:

1)定义我的类(.h文件)中的方法,并在.cpp文件中实现

//.h
class Foo
{
  int getVal() const;
};


//.cpp
int Foo::getVal() const
{ return 0; }

2)定义并实现我的类(.h文件)中的方法.

//.h
class Foo
{
  int getVal() const
  { return 0; }
};

3)定义我的类中的方法,并将其实现在类之外,但在头文件中.

//.h
class Foo
{
  int getVal() const;
};

int Foo::getVal() const
{ return 0; }

这三种方法之间的主要区别是什么?

解决方法

这个问题有三个要素:可读性(代码看起来有多好),编译(编译器可以优化多少)和实现隐藏(如果你使用代码作为库,你可能不想明确地分享你的特殊酱汁与世界).

方法只显示头文件中功能的接口.这意味着您会显示一个漂亮的干净的界面,并且您的实现不会以明文形式显示.然而,代码不能在编译单元中嵌入,所以它在运行时可能会稍微慢一点(实际上,这只对代码的非常非常小的百分比来说是重要的).这应该是你的默认方式.

方法2是隐式内联.很长的功能会使你的课堂混乱(imho)不好.还将您的实施暴露给了世界.但是,该函数可以内联,而不是比在另一个地方定义它更为冗长.我保留这个非常小的功能.

方法3实际上是非法的,因为你将打破一个定义的规则,但是以下是正确的:

//Foo.h
class Foo {
  int getVal() const;
};

inline int Foo::getVal() const { 
  return 0; 
}

我使用这个,当我想保持类定义清洁,但想要的头文件中的功能定义(对于可变的或模板函数).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读