我有一个名为Demo
的类,在该类中,我已经重载了Text()
方法来设置和获取名为text
的私有变量。
#ifndef DEMO_H
#define DEMO_H
#include <string>
#include <iostream>
using namespace std;
class Demo {
string text;
public:
Demo() {};
Demo(string newText) : text(newText) {};
void Text(string updatedText);
string Text();
};
#endif // !DEMO_H
void Demo::Text(string updatedText) {
text = updatedText;
}
string Demo::Text() {
return text;
}
然后在另一个类中,我按以下方式使用了该方法-
#include "Demo.h"
int main()
{
Demo d;
d.Text("test");
cout << d.Text() << endl;
return 0;
}
这很好。但是,我想使用“ =”运算符设置方法的参数。因此,而不是
d.Text("test");
我想做
d.Text = "test";
是否可以用C ++实现,如果可以,那么如何实现。我当时在考虑运算符重载,但无法实现目标。任何人都可以建议。
答案 0 :(得分:0)
与c#中类似的getter / setter函数一样,在c ++中最能表达属性的东西是提供以下类成员函数:
d.Text = "test";
该习惯用法在here之类的c ++标准库中得到了很多使用。
我想做
class Demo { public: string& Text() { return text; } };
你能做的是
d.Text() = "test";
和
<a href="#">focus1</a><br>
<a href='#' class='basic'>focus2</a><br>
<a href="#">focus3</a><br>
<a href="#">focus4</a><br>
<script
src="https://code.jquery.com/jquery-1.7.2.min.js"
integrity="sha256-R7aNzoy2gFrVs+pNJ6+SokH04ppcEqJ0yFLkNGoFALQ="
crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/simplemodal/1.4.4/jquery.simplemodal.min.js"></script>
<script>
jQuery(function ($) {
$('.basic').click(function (e) {
$('#basic-modal-content').modal();
$('.basic').focus();
return false;
});
});
</script>
:focus { outline:2px solid red;}
.basic { font-weight:bold; font-size:20px;}
#basic-modal-content {display:none;}
/* Overlay */
#simplemodal-overlay {background-color:#000;}
/* Container */
#simplemodal-container {height:260px; width:200px; color:#bbb; background-color:#333; border:4px solid #444; padding:12px;}
#simplemodal-container .simplemodal-data {padding:8px;}
#simplemodal-container code {background:#141414; border-left:3px solid #65B43D; color:#bbb; display:block; font-size:12px; margin-bottom:12px; padding:4px 6px 6px;}
#simplemodal-container a {color:#ddd;}
#simplemodal-container a.modalCloseImg {background:url(http://www.ericmmartin.com/wordpress/wp-content/themes/emm-v3/demos/x.png) no-repeat; width:25px; height:29px; display:inline; z-index:3200; position:absolute; top:-15px; right:-16px; cursor:pointer;}
#simplemodal-container h3 {color:#84b8d9;}
但这完全破坏了数据封装的概念。
答案 1 :(得分:0)
正确的处理方式是重载赋值运算符'='并按如下方式使用。
class Demo {
string text;
public:
Demo() {};
Demo(string newText) : text(newText) {};
**void operator =(const string& val) { text = val; }**
void Text(string updatedText);
string Text();
};
int main()
{
Demo d;
//d.Text("test");
d = "hello world";
cout << d.Text() << endl;
return 0;
}
答案 2 :(得分:0)
您可以将Text
属性定义为对象T
。然后T
可能会使一些公共属性操作过载(尚未弄清楚如何实现Object o; o.set(d.Text);
之类的通用getter调用):
#include <iostream>
using namespace std;
class T {
string _text;
public:
void operator =(const string& t) { _text = t; }
friend ostream& operator<<(ostream& os, const T& obj)
{
cout << obj._text;
return os;
}
};
class Demo {
public:
T Text;
};
int main()
{
Demo d;
d.Text = "test";
cout << d.Text << endl;
}