如何借助“ =”运算符在C ++中传递参数

时间:2018-09-06 01:25:59

标签: c++ methods parameters operator-overloading

我有一个名为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 ++实现,如果可以,那么如何实现。我当时在考虑运算符重载,但无法实现目标。任何人都可以建议。

3 个答案:

答案 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;
}