Redian新闻
>
C++ code里面的getter 是不好的设计吗?
avatar
C++ code里面的getter 是不好的设计吗?# Programming - 葵花宝典
r*e
1
谈了半小时后快结束在我问他问题时间段内,我问他何时能有消息。他说他们最近几周
都在和不同人面试,但结果一定会在下周出来。整个面试我觉得他似乎思维很跳跃,性质不是很高。
这样说一般是否就没戏了呢?
avatar
x*8
2
比如:
class X{
private:
int a_;
int b_;
public:
X(int a, int b): a_(a), b_(b){}
int F() {对a,b的复杂运算}
int G() {对a,b的复杂运算}
int GetA() const {return a_;}
int GetB() const {return b_;}
};
在这里面,GetA, GetB, 有人认为是java style getter是不好的设计,
但是我觉得,不这样,还能怎么办哪?确实需要知道这两个数的值,
拜请大侠指点,
--------------------------------------
update:
加了两个const,
大家再看看,
avatar
f*r
3
neutral
avatar
L*8
4
向python学习 没有private这种东西

【在 x**8 的大作中提到】
: 比如:
: class X{
: private:
: int a_;
: int b_;
: public:
: X(int a, int b): a_(a), b_(b){}
: int F() {对a,b的复杂运算}
: int G() {对a,b的复杂运算}
: int GetA() const {return a_;}

avatar
c*8
5
我最近的面试结束前HM基本都这么说
avatar
x*8
6
把a_, b_变成public应该是更不好的设计吧?

【在 L****8 的大作中提到】
: 向python学习 没有private这种东西
avatar
P*0
7
yes.

性质不是很高。

【在 r*******e 的大作中提到】
: 谈了半小时后快结束在我问他问题时间段内,我问他何时能有消息。他说他们最近几周
: 都在和不同人面试,但结果一定会在下周出来。整个面试我觉得他似乎思维很跳跃,性质不是很高。
: 这样说一般是否就没戏了呢?

avatar
L*8
8
a b 能修改 干啥要提供getter 脱裤子放屁行为

【在 x**8 的大作中提到】
: 把a_, b_变成public应该是更不好的设计吧?
avatar
x*8
9
如果既有getter, 又有setter,那我理解你的观点,
但是这个class X 只有getter, 没有setter,
在 声明一个对象之后,
X x(2,4);
a_ 和 b_ 也就不会允许简单得修改了,

【在 L****8 的大作中提到】
: a b 能修改 干啥要提供getter 脱裤子放屁行为
avatar
h*l
10
暴露了太多的内部实现细节。不理解为啥a和b那么重要,需要外部对象读它们的值。感
觉可以封装的更好些。

【在 x**8 的大作中提到】
: 比如:
: class X{
: private:
: int a_;
: int b_;
: public:
: X(int a, int b): a_(a), b_(b){}
: int F() {对a,b的复杂运算}
: int G() {对a,b的复杂运算}
: int GetA() const {return a_;}

avatar
f*t
11
C++相比于其它语言的最大区别在于ownership。
楼主的int例子没有在getter后加const,可能是不对的。定义getter主要是为了明确
client的权限。比如X的作者实际上并不希望别人去修改(甚至不希望别人看到)a的值
和地址,如果client可以直接用x.a就没法保证作者的需求了。自然的解决方式是 int
getA() const { return a_; } ,复制一个int给client。
最近跟某C++狂热爱好者讨论了一个实际的例子:inmem cache。如何定义get接口?是
返回引用V&或shared_ptr,要不要加const,还是复制一份并返回std::optional
?用其它语言的时候从来没这样深入考虑过。
avatar
h*c
12
我很长时间不翻看linux核心代码了,好的代码就是有人给你钱你写,不好的代码就是
没有钱,
非常功利实用主义,最近
搬家泪的吐血,发现军版发生了大清洗,以前的回文都没有了,以前就是登入进来,找
自己的版面回文比在首页往下翻少操作很多下鼠标。
借楼主续一下貂。看看风向

【在 x**8 的大作中提到】
: 比如:
: class X{
: private:
: int a_;
: int b_;
: public:
: X(int a, int b): a_(a), b_(b){}
: int F() {对a,b的复杂运算}
: int G() {对a,b的复杂运算}
: int GetA() const {return a_;}

avatar
h*l
13
大牛讲讲怎么看linux内核代码吧。 :)

【在 h**********c 的大作中提到】
: 我很长时间不翻看linux核心代码了,好的代码就是有人给你钱你写,不好的代码就是
: 没有钱,
: 非常功利实用主义,最近
: 搬家泪的吐血,发现军版发生了大清洗,以前的回文都没有了,以前就是登入进来,找
: 自己的版面回文比在首页往下翻少操作很多下鼠标。
: 借楼主续一下貂。看看风向

avatar
x*u
14
用getter可以防止caller私藏份引用啊

【在 L****8 的大作中提到】
: a b 能修改 干啥要提供getter 脱裤子放屁行为
avatar
w*s
15
改成
class X{
public:
const int a_;
const int b_;
public:
X(const int a, const int b): a_(a), b_(b){}
int F() {对a,b的复杂运算}
int G() {对a,b的复杂运算}
};
不行吗?
avatar
x*8
16
F, G可能会改变a_, b_的值,
所以声明成const不太行,
除非改设计,
再加几个变量啥的,

【在 w*******s 的大作中提到】
: 改成
: class X{
: public:
: const int a_;
: const int b_;
: public:
: X(const int a, const int b): a_(a), b_(b){}
: int F() {对a,b的复杂运算}
: int G() {对a,b的复杂运算}
: };

avatar
x*8
17
对的,是该在函数后面加const,

int
V>

【在 f*******t 的大作中提到】
: C++相比于其它语言的最大区别在于ownership。
: 楼主的int例子没有在getter后加const,可能是不对的。定义getter主要是为了明确
: client的权限。比如X的作者实际上并不希望别人去修改(甚至不希望别人看到)a的值
: 和地址,如果client可以直接用x.a就没法保证作者的需求了。自然的解决方式是 int
: getA() const { return a_; } ,复制一个int给client。
: 最近跟某C++狂热爱好者讨论了一个实际的例子:inmem cache。如何定义get接口?是
: 返回引用V&或shared_ptr,要不要加const,还是复制一份并返回std::optional
: ?用其它语言的时候从来没这样深入考虑过。

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。