gpt4 book ai didi

c++ - 在 set 方法中传递 get 方法

转载 作者:行者123 更新时间:2023-11-30 05:17:35 26 4
gpt4 key购买 nike

我是 OOP 的新手,正在尝试自学。

我不确定这个简单的(感觉很简单,但我有心理障碍)练习的逻辑实现:

  • 创建一个Employee 类,包含namesurnamesalary 字段
  • 创建 2 名员工并在增加 10% 前后打印他们的工资。

所以,这是我的文件:

// employee.h

#ifndef EMPLOYEE_H
#define EMPLOYEE_H

#include <string>
using std::string;


class Employee {


private:
string name;
string surname;
float salary;

public:
Employee(string,string,float);
void setName(string);
void setSurname(string);
void setSalary(float);
string getName();
string getSurname();
float getSalary();

};


#endif // EMPLOYEE

employee.cpp
#include "employee.h"

Employee::Employee(string n,string c,float stip) {

Employee::setName(n);
Employee::setSurname(c);
Employee::setSalary(stip);

}


void Employee::setName(string n){

name=n;

}
void Employee::setSurname(string c){

surname=c;

}

void Employee::setSalary(float stip){

salary=(stip>=0)?stip:0;

}


string Employee::getName(){


return name;

}

string Employee::getSurname(){


return surname;

}

float Employee::getSalary(){

return salary;

}

increase.h
#ifndef INCREASE_H
#define INCREASE_H

namespace Increase {

const float inc2017=1.1;

}



#endif // INCREASE_H

关于主文件,我考虑了 2 种可能性:

1)使用变量本地保存工资

float prov=a.getSalary();

a.setSalary(prov*Increase::inc017);

2)在set方法中传递get方法:

a.setSalary(a.getSalary()*Increase::inc2017);

哪个更好?

数字 2 在逻辑上是否正确,或者我是否以这种方式绕过封装?

(我知道在这个小问题中并不是真的需要使用 namespace header ,但我正在朝着一个更大的项目努力,我想为此做好心理准备)

最佳答案

回答您的具体问题:设置新值时不使用临时变量是完全可以的。

一旦值被提取出来,它就不可能破坏封装,因为我们谈论的是根本不接触对象内部的代码。

评论中建议的解决方案可以使该类更加封闭/具体,它是一个专用的“increase by”成员函数,但是由您决定该类是否应该具有内部功能,或者是否你例如想将增加委托(delegate)给另一个组件。

根据经验,如果该类没有围绕其成员的不变量的额外逻辑,则可以将成员公开 - 这样您就可以摆脱 getter 和 setter 并且您的问题会自行回答。

关于c++ - 在 set 方法中传递 get 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42067199/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com