我有一个简单的类:classA{public:intget()const;private:voiddo_something();intvalue;}intA::get()const{returnvalue;}getter函数简单明了。Getters将使用它们,所以在do_something中我应该使用get()来访问value。我的问题是:编译器是否会优化getter,所以它等同于直接访问数据?或者如果我直接访问它我仍然会获得性能(这意味着更糟糕的设计)?A::do_something(){x=get();//or...x=value;} 最佳答案
如果我需要为我编写一个setter和/或getter,我会这样写:structX{/*...*/};classFoo{private:Xx_;public:voidset_x(Xvalue){x_=value;}Xget_x(){returnx_;}};但是我听说这是编写setter和getter的Java风格,我应该用C++风格来编写。此外,有人告诉我这是低效的,甚至是不正确的。那是什么意思?如何用C++编写setter和getter?假设对getter和/或setter的需求是合理的。例如。也许我们在setter中做一些检查,或者我们只写getter。关于不需要getter和set
返回vector大小的getter应该返回什么类型的值?例如,我的项目中有许多以下类型的setter/getter,并且我需要(int)转换来删除编译警告:intgetNumberOfBuildings()const{return(int)buildings.size();} 最佳答案 C++03方式:std::vector::size_typegetNumberOfBuildings()const{returnbuildings.size();}C++11方式:autogetNumberOfBuildings()const->de
我所说的属性是指C#风格的属性,带有getter和setter。我很想知道为什么它们不是C++语言的一部分。我假设在编写规范时一定已经讨论过这样的特性,因此不将它包含在语言中是一个明智的决定。 最佳答案 这是一种实现方式:http://www.codeguru.com/cpp/cpp/cpp_mfc/article.php/c4031/Implementing-a-Property-in-C.htminti=5,j;PropTesttest;test.Count=i;//--callthesetmethod--j=test.Coun
我想知道如何为占用大量内存的成员变量使用getter和setter。通常我会这样做:classA{private:BigObjectobject;public:BigObjectgetObject()const{returnobject;}voidsetObject(constBigObject&object){this->object=object;}};但是我相信这个getter和setter会复制我不想要的BigObject。有更好的方法吗?我想这样做,但我在网上看到这不是一个好主意,因为如果使用不当会导致段错误:BigObject&getObject(){returnobjec
我的类中有一个具有4个属性的结构“边距”。与其编写四种不同的getter/setter方法,我想我可以用更好的方式来完成:classmyClass{private:structmargin{intbottom;intleft;intright;inttop;}public:structgetMargin();voidsetMargin(stringwhich,intvalue);};但是如何在函数setMargin()中设置与字符串“which”对应的结构的属性?例如,如果我调用myClass::setMargin("left",3),我如何才能将“margin.left”设置为“3”
假设我有一个包含std::atomic_flag作为私有(private)成员的类,通过getter公开。类似于以下内容(伪代码):classThing{private:std::atomic_flagready=ATOMIC_FLAG_INIT;public:isReady(){returnready.test_and_set();}}我天真的问题是:通过方法查询标志是否会将其变成非原子操作,成为非原子函数调用(或者是?)?我是否应该让我的ready标记为公共(public)成员并直接查询它? 最佳答案 不,它没有。test_an
我最近遇到了使用配置对象而不是通常的setter方法进行配置的类。一个小例子:classA{inta,b;public:A(constAConfiguration&conf){a=conf.a;b=conf.b;}};structAConfiguration{inta,b;};优点:您可以扩展您的对象并轻松保证新值的合理默认值,而您的用户根本不需要知道它。您可以检查配置的一致性(例如,您的类只允许某些值的组合)通过省略setter可以节省大量代码。您获得一个默认构造函数,用于为您的配置结构指定默认构造函数并使用A(constAConfiguration&conf=AConfigurat
我正在使用PrimeFaces6.1,并与SelectoneMenu之一有问题。我只将页面减少到SelectOneMenu-Item,但无法弄清楚问题所在的位置。xhtml页:#{interfaceFileItem.fileName}转换器:@ManagedBean@SessionScoped@Named("interfaceFileConverter")publicclassInterfaceFileConverterimplementsConverter{privatefinalLoggerlogger=Logger.getLogger(this.getClass().getName())
如果我有一个简单的类,例如...classRectangle{private:doublelength;doublewidth;public:voidsetLength(doublel){length=l;}voidsetWidth(doublew){width=l;}voidgetLength(){returnlength;}voidgetWidth(){returnwidth;}voidgetArea(){returnlength*width;}};...并且使用它的人使用无效参数调用增变器setWidth(),例如-1.0,处理此问题的正确方法是什么?当我说正确时,例如,我是否应