C ++使用成员对象的Setter

时间:2018-11-24 00:03:05

标签: c++ class setter

我目前正在使用类和对象来开发我的第一个项目,而我的二传手却遇到了一些障碍。我举了一个例子来说明我所遇到的问题(为简单起见,所有文件均为一个文件。)

import urllib.request
from bs4 import BeautifulSoup
import re 
from collections import Counter 
import string 
from string import punctuation
from collections import OrderedDict 
from bs4.element import Comment
import pandas as pd
import requests
import re
import numpy as np 

def user_input(): 
    brand = input("search item?")
    link1 = 'https://google.com/search?q='+brand+'&u=&'
    link2 = 'http://yahoo.com/?site=thedrive&q='+brand 
    link3 = 'https://www.bloomberg.com/'+brand+'/news/'
    link4 = 'https://www.cnet.com/roadshow/make/'+brand+'/'
    list1 = [link1,link2,link3,link4]
    return list1 

def request(): 
    html_list = [] 
    list1 = user_input() 
    for item in list1: 
        with urllib.request.urlopen(item) as response:
            html = response.read()
            html_list.append(html)
    return len(html_list) 

user_input()  
request() 

输出:

#include <stdio.h>
#include <iostream>
#include <string>

using namespace std;

class Example1
{
public:
    Example1() { name = "Mike"; }
    Example1(string aName) { name = aName; }
    string GetName() const { return name; }
    void SetName(string newName) { name = newName; }
private:
    string name;
};

class Example2
{
public:
    Example2() : anObj() {}
    Example2(string aName) : anObj(aName) {}
    Example1 GetObj() const { return anObj; }
    void SetObj(string objName) { anObj.SetName(objName); }
private:
    Example1 anObj;
};

int main()
{
    Example2 myObj;
    cout << myObj.GetObj().GetName() << endl;
    myObj.GetObj().SetName("Stan");
    cout << myObj.GetObj().GetName() << endl;
}

这个想法是通过使用成员对象的setter方法来更改Example2中的成员对象,但是setter方法似乎没有按我预期的方式工作。

我尝试通过将成员移到公共位置(在Example2中)并使用点符号来访问该成员,然后成功更改了名称。我不确定区别是什么,但是,由于吸气剂工作正常,我觉得我使用坐便器的方式有些问题。

我要解决的最初问题是使用Game类和Player类成员对象。想法是,玩家可以根据需要更改其名称。

感谢任何帮助。谢谢。

1 个答案:

答案 0 :(得分:3)

您所有的吸气剂都会返回一个新对象。别。让他们返回const&。但是,当您修改对象以调用setter时,就需要一个非const getter:

const Example1& GetObj() const;
Example1& GetObj();

现在,存储在其下的对象将被更新,而不仅仅是其副本。字符串相同。

您还可以通过调试器看到设置器无法在正确的对象上工作的事实。