第一天上班,有种书白念的感觉。。

加盾男爵 2016-10-17 09:05:19
本人半路出家,自学编程,今年终于找了一份C++工作,虽然工资试用期只有3K,但我激动的那个内牛满面啊。。

今天第一天去公司上班,公司的人(领导,人称徐工)给了我一些代码,让我先看着,然后我打开一看,一个类作为基类,然后继承,继承,在继承。。

但让我感到疑惑的是,所有类成员都是pretocted的,我当时就蒙了。。我以为是这个公司的技术吧,秉着不懂就要问的精神,我去问徐工,“老大,这个类成员为什么设为保护而不是私有”

一下为徐工回答原文

“这你就不懂了吧,这个类作为基类,其他继承他的类要用到这个基类的数据,如果你把数据设为私有,拿继承的类怎么使用这些数据,我知道你自己学的时候写个代码玩玩可以把类成员设为私有的,但你要知道我们工作和你学习有很大不同的,如果你把类成员设为私有,你怎么继承”

以上内容为回答的原话,未改一字。。

徐工算公司的项目领导吧,目测40岁左右,我当场就想搬出一套书上的理论反驳他,但想想,秉着尊老爱幼,尊重领导的原则,我最终还是没说啥,点了点头表示赞同

本人因为自学党,虽然技术自信绝对过硬,但找工作没经验是个软肋,所以打算这第一份工作混半年经验,明年再跳槽,所以就决定照着公司的来了
...全文
543 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
加盾男爵 2019-06-19
  • 打赏
  • 举报
回复
引用 14 楼 勤奋的小游侠 的回复:
你是错的,你的领导是对的。
class A
{
protected:
	int  mProtect;
private:
	int mPrivate;
};

class B :  public A
{
	void func()
	{
		B obj;
		int result1 = obj.mProtect; //保护的,我当然能用,你以为是用自己的this.mProtect呀?是用兄弟的
		int result2 = obj.mPrivate;//私有的话怎么使用兄弟的这些数据
	}
};

class C 
{
	void func()
	{
		B obj;
		int result1 = obj.mProtect; //非A的子类,全不能访问
		int result2 = obj.mPrivate;//非A的子类,全不能访问
	}
}
谦虚点总不会错
引用 14 楼 勤奋的小游侠 的回复:
你是错的,你的领导是对的。
class A
{
protected:
	int  mProtect;
private:
	int mPrivate;
};

class B :  public A
{
	void func()
	{
		B obj;
		int result1 = obj.mProtect; //保护的,我当然能用,你以为是用自己的this.mProtect呀?是用兄弟的
		int result2 = obj.mPrivate;//私有的话怎么使用兄弟的这些数据
	}
};

class C 
{
	void func()
	{
		B obj;
		int result1 = obj.mProtect; //非A的子类,全不能访问
		int result2 = obj.mPrivate;//非A的子类,全不能访问
	}
}
谦虚点总不会错
今天突然翻到还是小白的我的帖子。。。。 不过今天我可以很自信的说,这是我是对的,领导是错的 虽然我早就换公司了
LongRui888 2016-10-19
  • 打赏
  • 举报
回复
上班了呀,恭喜啊。 我也是无锡的
ooolinux 2016-10-19
  • 打赏
  • 举报
回复
他的基类那些protected成员,大部分成员是因为派生类中要访问,图个方便,就统一放到protected里的,其实有部分可能private就可以了,不过刚开始不好判断派生类会不会访问。
JasonCharlesBourne 2016-10-19
  • 打赏
  • 举报
回复
请教他领导哪里错了?
小灰狼 2016-10-19
  • 打赏
  • 举报
回复
可能楼主的是对的 但很多设计现在看来不合理,是由多种原因造成的,不完全是技术原因
愤怒的小妈 2016-10-18
  • 打赏
  • 举报
回复
也曾有此疑惑
勤奋的小游侠 2016-10-18
  • 打赏
  • 举报
回复
你是错的,你的领导是对的。
class A
{
protected:
	int  mProtect;
private:
	int mPrivate;
};

class B :  public A
{
	void func()
	{
		B obj;
		int result1 = obj.mProtect; //保护的,我当然能用,你以为是用自己的this.mProtect呀?是用兄弟的
		int result2 = obj.mPrivate;//私有的话怎么使用兄弟的这些数据
	}
};

class C 
{
	void func()
	{
		B obj;
		int result1 = obj.mProtect; //非A的子类,全不能访问
		int result2 = obj.mPrivate;//非A的子类,全不能访问
	}
}
谦虚点总不会错
ipqtjmqj 2016-10-18
  • 打赏
  • 举报
回复
够用就行,重构代码吃力不讨好
AlbertS 2016-10-18
  • 打赏
  • 举报
回复
需要被继承写就写成protected,到此为止写成private,自我感觉良好写成public 最后一句胡诌的
赵4老师 2016-10-18
  • 打赏
  • 举报
回复
上帝为什么不心血来潮重构一下这个混乱无比的世界呢?!
赵4老师 2016-10-18
  • 打赏
  • 举报
回复
请牢记:源代码本身的书写是否结构化或面向对象或符合设计模式或敏捷…并不重要,重要的是你是否使用结构化或面向对象或符合设计模式或敏捷…的方法命名标识符、阅读、修改、检查、测试源代码。 意思是你程序结构看上去再合理,再简洁,也不一定比看上去一团乱麻的程序结构在运行或修改时更不易出错,更方便修改,出错了更容易找到哪里出错和具体出错的原因,更容易改正错误。 试对比 图书馆(对图书的分类够结构化了吧) 和 搜索引擎(可看作是扁平化任何结构数据,仅支持全文检索) 哪个处理信息更方便、更高效。 所以 与其费劲去重构代码让其看上去更简洁、更合理 不如费劲学习grep、sed、awk、……这类全文搜索和批处理编辑的工具。 结构越复杂,越难修改,越难除错。 有时(甚至大多数时候),看上去越合理、越简洁的代码,运行起来性能越差,出错时查找原因越难,找到出错原因后改正越费劲。 程序员要做的不是尽力避免错误,而是聚焦在快速发现并改正错误。真正以快速方式轻易解决错误,“快速的失败”远胜过“预防错误”。Fred George 前微软C#编辑器的开发主管Jay Bazuzi列出的一些有助于找到正确方向的问题;他觉得前同事们应该用这些问题来问自己;实际上不管在哪里工作的开发者们都应该经常问问自己这些问题: ◆“要保证这个问题不会再出现,我该怎么做?” ◆“要想少出些Bug,我该怎么做?” ◆“要保证Bug容易被修复,我该怎么做?” ◆“要保持对变化的快速响应,我该怎么做?” ◆“要保证我的软件的运行速度,我该怎么做?” 如果大多数团队都能不时问一下自己,必定会从中得益,因为这些都是真正强而有力的问题。
Sniper_Pan 2016-10-18
  • 打赏
  • 举报
回复
四年+码农一枚,很多时候道理都懂,也不是不想改,而是公司不然改。。 毕竟代码大动,成则罢了,不成,责任谁来担。。。 所以很多公司放着代码不重构,不是因为没意识,而是因为没意思。。
jiqiang01234 2016-10-18
  • 打赏
  • 举报
回复
过多的protected成员数据,就已经说明这个类需要继承,很可能不需要继承就可以实现。所以,这个“基类”承担了太多不该承担的功能。现在的c++不提倡过多使用继承,尤其是从一个庞杂的基类继承。我推测你们公司的代码比较久远了,那时的c++和现在的c++对于面向对象的理念已经不一样了。 完全可以不使用那么多protected的成员数据。可以改为private后,在基类增加Get和Set函数,从而可以在子类中使用基类的数据。 要知道,继承就意味着需要遵守里氏替换原则。太多的保护数据,是很难做到的。
3120150911205zjy 2016-10-17
  • 打赏
  • 举报
回复
学以致用,实用的时候才能发现最优解,符合实际的应是最好的,
ooolinux 2016-10-17
  • 打赏
  • 举报
回复
引用 3 楼 u010165006 的回复:
基类的私有成员在继承类中无法访问,不对吗?
基类的成员既要能在派生类中访问(public或protected),又不能在类外被访问(- public),只能protected了。
ztenv 版主 2016-10-17
  • 打赏
  • 举报
回复
引用 4 楼 qazaq408 的回复:
[quote=引用 1 楼 lianshaohua 的回复:] 不能说他错,也不能说你对,书上的不一定是对的,
你这么说好像我也还不了你口。。。毕竟就算把类成员设为公有也是符合C++标准的[/quote] 高为公有的,也是有可能的,我的意思是要视实际的情况而定,而不能照搬照抄书本上的知识
加盾男爵 2016-10-17
  • 打赏
  • 举报
回复
引用 1 楼 lianshaohua 的回复:
不能说他错,也不能说你对,书上的不一定是对的,
你这么说好像我也还不了你口。。。毕竟就算把类成员设为公有也是符合C++标准的
ooolinux 2016-10-17
  • 打赏
  • 举报
回复
基类的私有成员在继承类中无法访问,不对吗?
加盾男爵 2016-10-17
  • 打赏
  • 举报
回复
引用 1 楼 lianshaohua 的回复:
不能说他错,也不能说你对,书上的不一定是对的,
ztenv 版主 2016-10-17
  • 打赏
  • 举报
回复
不能说他错,也不能说你对,书上的不一定是对的,

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧