标签: reference

明确初始化成员意味着什么?

在以下代码中

class someClassB;

class someClassA
{
public:
    someClassA(int x, int y);
private:
    someClassB* B;
};

class someClassB
{
public:
    someClassB(int x, int y);
private:
    int x;
    int y;
    someClassA A;
};

someClassA::someClassA(int i, int j) 
{
    B->x = i;
    B->y = j;
}

someClassB::someClassB(int i, int j)
{
    x = i;
    y = j;
    A = new someClassA(i, j);
}
Run Code Online (Sandbox Code Playgroud)

为什么我得到一个错误,''someClassB'的构造函数必须显式初始化没有默认构造函数的成员'A'?我是不是在someClassB的构造函数中初始化'A'?

c++ pointers reference

0
推荐指数
1
解决办法
121
查看次数

Java逻辑混乱

有人可以向我解释为什么这个代码打印出"abeb"而不是abcb?我理解这是因为你从list1引用list2所以改变list2也改变了list1但是我并不完全理解它.

char [] list1 = {'a','b','c','d'};    
char [] list2 = list1;    
list2[2] = 'e';    
list1[3] = list2[1]    
for (char a: list1)    
out.print(a)`
Run Code Online (Sandbox Code Playgroud)

为什么在此代码中没有应用相同的逻辑(我理解的逻辑)?它打印出x作为"5"是从我从上面的代码中理解它应该是7?

int x = 5;
int y = x;
y += 2;
out.print(x);
Run Code Online (Sandbox Code Playgroud)

java reference

0
推荐指数
1
解决办法
66
查看次数

在这种情况下我会回报什么?

我将发布我的代码然后解释我的查询:

typedef std::shared_ptr<SEntity> Entity;

//Scene_Ids is an enum
static std::map<Scene_Ids, std::vector<Entity> > m_scene_entities;

std::shared_ptr<SEntity>& SEntityManager::getEntity(const std::string& entity_name)
{
    int counter = 0;

    for (auto iter = m_scene_entities.begin(); iter != m_scene_entities.end(); ++iter)
    {
        if (iter->second[counter]->getId() == entity_name)
            return iter->second[counter];

        counter++;
    }

    //What would I return if the entity couldn't be found?
}
Run Code Online (Sandbox Code Playgroud)

代码基本上解释了这一切.我有一个方法,如果在地图内的std :: vector中找到"实体",它将返回对它的std :: shared_ptr类型的引用.但是,由于我没有返回指针,我无法返回nullptr.在失败的情况下我能回报什么?

另外,我知道std :: shared_ptr意味着在几个不同的地方有副本.为此,我真的需要返回一个引用,还是可以按值返回它?

谢谢!

c++ pointers reference std shared-ptr

0
推荐指数
1
解决办法
73
查看次数

如果首先使用非const初始化,为什么允许对const的非const引用?

可以理解,编译器将不允许以下内容:

const int ci = 1000;
int &r = ci;
Run Code Online (Sandbox Code Playgroud)

因为这意味着我可以尝试通过r来改变ci的值,但ci是const.

为什么然后允许以下内容,除了首先为r分配非const int之外,它与上面相同?

int i;
const int ci = 1000;
int &r = i;
r = ci;
Run Code Online (Sandbox Code Playgroud)

如果您尝试通过r更改ci,则ci将保持相同的值.然而,与第一个示例不同,它不会被编译器捕获.对此有解释吗?

c++ const reference

0
推荐指数
1
解决办法
82
查看次数

在UML图中,我如何说明一个持有自身引用的类?

我想知道如何在UML图中在类中包含对自身的引用列表.

例如:模型由许多组件组成.组件可以包含对其子组件的引用列表.

我如何在UML图中说明这一点?

uml reference class

0
推荐指数
1
解决办法
431
查看次数

通过引用或指针声明属性C++

我想声明一个类的一些属性.我正在考虑为类中我想要的属性创建私有变量.

然后通过引用公开私有变量.但是我通过指针也可以传递私有变量的地址.因此,类的用户可以修改变量.

那么哪种方式通过引用或指针会更好,如下例所示?

class ExampleClass
{

  private:
    int age;

  public:
    //This function allows access via reference
    int& GetAgeByReference()
      { 
         int& refAge= age;
         return refAge;
      }
    //This function allows access via pointer
    int* GetAgeByPointer()
      { 
         int* pointAge= &age; 
         return pointAge; 
      }


}
Run Code Online (Sandbox Code Playgroud)

c++ pointers reference

0
推荐指数
1
解决办法
406
查看次数

如何在c ++中返回类的引用

据我所知,this是一个指针,*this是一个参考.所以,如果我有一个类Sample和一个方法,如:

Sample operator++(){
    int i;
    for(i=0;i<this->length;i++){
        this->array[i]+=1;
    }
    return *this;
}
Run Code Online (Sandbox Code Playgroud)

或者另一种方法.

Sample &operator++(){
    int i;
    for(i=0;i<this->length;i++){
         this->array[i]+=1;
    }
    return *this;
}
Run Code Online (Sandbox Code Playgroud)

在这两者之间,这将是正确的方法吗?

c++ reference class

0
推荐指数
1
解决办法
52
查看次数

operator []根据变量类型返回引用或复制

参考这个,如果我有std::map<double, Object> my_map,是以下等价物?

Object& obj = my_map[1];
Object obj = my_map[1];
Run Code Online (Sandbox Code Playgroud)

我知道operator[]通过引用返回,第一种方式,正确的方法,而不是创建副本,或者它们是相同的.如果它们是相同的,我不确定它们为什么会这样.

同样,如果我也有......

std::map<double, Object>::iterator it;
Run Code Online (Sandbox Code Playgroud)

以下是类似的吗?

Object& obj = it->second;
Object obj = it->second;
Run Code Online (Sandbox Code Playgroud)

c++ reference map

0
推荐指数
1
解决办法
49
查看次数

c ++:返回对临时的引用

我制作了这个c ++代码:

std::string const &     Operand::toString() const
{
  std::ostringstream    convert;
  convert << this->value;
  return convert.str();
}
Run Code Online (Sandbox Code Playgroud)

编译器告诉我: returning reference to temporary

难道我被迫把convert.str()我的Operand班?

编辑:这是一个学校运动,我不能改变原型

c++ reference

0
推荐指数
1
解决办法
3330
查看次数

通过引用传递向量,但更改不会粘贴c ++

void RemoveGreenEffect::processImage(vector<Point>& points)
{
    for (int i = 0; i < points.size(); ++i)
    {
        points[i].setGreen(0);
    }
}
Run Code Online (Sandbox Code Playgroud)

此函数正确引入向量并在本地进行更改.但是,当程序返回main时,它不会保留更改.有人可以解释我做错了吗?如果有帮助,这里是main的调用函数.

for (int i = 0; i < ppm.getRows(); ++i)
{
    my_effect->processImage(picture.getPicture()[i]); 
}
Run Code Online (Sandbox Code Playgroud)

my_effect是一个基类指针,指向派生对象RemoveGreenEffect.getPicture()是Point对象向量的向量,因此getPicture()[i]是Point类的向量.目标是一次一行地删除图片中的所有绿色值像素,但同样,更改仅在本地工作.

编辑,这是getPicture()

vector<vector<Point>> PointFormatPicture::getPicture()
{
return _picture;
}
Run Code Online (Sandbox Code Playgroud)

这是_picture是什么

vector<vector<Point>> _picture;
Run Code Online (Sandbox Code Playgroud)

c++ scope reference vector

0
推荐指数
1
解决办法
89
查看次数

标签 统计

reference ×10

c++ ×8

pointers ×3

class ×2

const ×1

java ×1

map ×1

scope ×1

shared-ptr ×1

std ×1

uml ×1

vector ×1