我最近开始制作简单的2D游戏,并遇到了两难 - 使用或不使用getter和setter方法来处理对象的x和y位置.如果我不使用方法,但是直接访问变量会更加清晰,而且对对象的许多方法调用会损害性能.此外,获取和设置位置仍然很简单,所以这里真的不需要封装吗?或者我们是否应始终坚持使用getter和setter方法的约定?
为什么C++复杂类使用函数来修改实部和虚部?公共成员变量是否也可以在不必处理getter和setter的情况下工作?所有被隐藏的是真实和虚构部分的私人名称.
我有一个顶点向量,我希望将vertice.setVisit设置为false或0.我为此定义了一些getter和setter,但是遇到了一些类型错误.代码如下:
//Vector:
std::vector<project3::Vertex<VertexType, EdgeType>*> Vertice1;
//Class containing methods:
template <class VertexType, class EdgeType> class Vertex{
protected:
//std::vector<std::pair<int, EdgeType>> VertexList;
VertexType vertice;
EdgeType edge;
int num;
int mark;
//int status=0;
public:
void setNum(int){ this.num = num; }
int getNum() { return num; }
int getMark(){ return mark; }
void setVisit(int) { this.mark = mark; }
};
Run Code Online (Sandbox Code Playgroud)
在某些函数中,我将值分配给它:
for(int i=0; i<g1.Vertice1.size(); i++)
{
g1.Vertice1.at(i)->setNum(0);
g1.Vertice1.at(i)->setVisit(0);
}
Run Code Online (Sandbox Code Playgroud)
下面是编译"this.mark = mark"代码和类中函数定义中"this.num = num"的错误.
Error: left of '.mark' must have class/struct/union
Error: left of '.num' …Run Code Online (Sandbox Code Playgroud) 用一个处理两者的方法替换getter和/或setter方法是个好主意吗?
例如:
function name($what = null){
if(!$what)
return $this->name;
$this->name = $what;
}
Run Code Online (Sandbox Code Playgroud)
使用如下:
// get name
print $obj->name();
// set name
$obj->name('bla');
Run Code Online (Sandbox Code Playgroud)
我见过一些框架做到了.它被社区认为是好的还是坏的做法?:P
它似乎更有效,但它看起来有点混乱,因为我习惯于在PHP中使用getThing()和setThing().这种风格让我想起了jQuery.
我有一个类ApplicationDetails,使用getter和setter方法.
public class ApplicationDetails {
String supportURL;
String companyURL;
String copyRightText;
// with getter and setter methods
}
Run Code Online (Sandbox Code Playgroud)
我在启动画面活动中设置所有数据.
ApplicationDetails appDetails = new ApplicationDetails();
String supportURL = getResources().getString(R.string.support_url);
appDetails.setSupportURL(supportURL);
Run Code Online (Sandbox Code Playgroud)
对于示例我只是从字符串文件设置数据,但在应用程序中它来自不同的来源.
但是当我尝试访问不同活动中的数据时,它返回null值.例如
public class AboutViewController extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ApplicationDetails appDetails = new ApplicationDetails();
System.out.println(" app support url " + appDetails.getSupportURL());
}
}
Run Code Online (Sandbox Code Playgroud)
产量
I/System.out(2242): app support url null
Run Code Online (Sandbox Code Playgroud)
任何帮助.
我是ruby和编程的新手,我正在尝试掌握一些关键概念.鉴于我有一类狗,具有以下特点.
class Dog
attr_accessor :type, :popularity, :total
def initialize(type = nil)
@type = type
end
def total_dogs
Dog.count
end
def total
Dog.where(:type => self.type).size
end
def popularity
total.to_f/total_dogs
end
end
Run Code Online (Sandbox Code Playgroud)
我想要了解的是,ruby如何通过getter/setter方法将属性持久化到实例.我清楚地知道,如果我实例化一个新实例然后将属性保存到该实例,那么这些属性就绑定到该实例,因为如果我查看该对象,则属性如下所示:
@dog = Dog.new
@dog
=> #<Dog:0x007fa8689ea238 @type=nil>
Run Code Online (Sandbox Code Playgroud)
我很容易理解,当我传递@dog对象时,总是将@type属性作为nil.但是,我理解的情况是我将这个@dog对象传递给另一个类.就像我做的那样:
Owner.new(@dog)
Run Code Online (Sandbox Code Playgroud)
当我在所有者类中并且我调用@ dog.popularity时,它如何知道该实例的流行度值?在运行时,所有方法都被处理,然后该实例总是与当时的值绑定?抱歉,如果这没有意义,或者我离开了.
我想知道是否可以有一个属性设置器来返回一个值。下面的代码试图从表面上解释问题。
基本上,我需要为对象设置一个属性,但是在我需要检查它是否唯一之前。我想知道是否有一种方法可以直接将唯一名称返回给用户,而无需在此后查询对象的新名称。
class MyClass(object):
def __init__(self,ID):
self._ID = ID
@property
def Name(self):
return DBGetName(self._ID)
@Name.setter
def Name(self, value):
UniqueName = DBGetUniqueName(self._ID,value)
return DBSetName(UniqueName)
Myinstance = MyClass(SomeNumber)
#What I do now
Myinstance.Name = "NewName"
Uniquename = Myinstance.Name
#What I was wondering if possible. Line below is syntactically invalid, but shows the idea.
Name = (Myinstance.Name = "NewName")
Run Code Online (Sandbox Code Playgroud)
编辑:这是一个伪代码,我忘了实际将值传递给内部函数。我的错。
我想覆盖以下类中的属性.假设我有一个A具有布尔属性的类r.对于超类A,我希望r被设置并获得正常.对于子类B,我想r永远是false.我不确定为什么这比它应该更难......
class A {
init(r: Bool) {
self.r = r
}
var r: Bool {
willSet(n) {
r = n
}
get {
return r
}
}
}
class B: A {
override var r: Bool {
willSet(n) {
r = n
}
get {
return false
}
}
}
let a = A(r: true)
a.r = false
print(a.r) // prints 'false', which is good
let …Run Code Online (Sandbox Code Playgroud) class Clock {
constructor() {
this.schedule = [];
this.simulationTime = 0;
}
get isEmpty() {
return this.schedule == false;
}
popFirstItem(){
if(isEmpty){
throw "error";
}
}
};
Run Code Online (Sandbox Code Playgroud)
我希望isEmpty()在popFirstItem()方法中调用getter .但是,我无法做到.什么是调用的正确方法isEmpty()的popFirstItem()方法是什么?
在以下代码中,两者都使用console.log(o.x)print 1.任务会o.x = 2怎样?它被忽略了吗?
var o = {
get x() {
return 1;
}
}
console.log(o.x); // 1
o.x = 2
console.log(o.x); // 1
Run Code Online (Sandbox Code Playgroud) getter-setter ×10
c++ ×2
java ×2
javascript ×2
setter ×2
android ×1
class ×1
coding-style ×1
decorator ×1
getter ×1
inheritance ×1
object ×1
php ×1
properties ×1
python ×1
python-3.x ×1
ruby ×1
swift ×1
vector ×1