在C++中,关键字this通常是否省略?例如:
Person::Person(int age) {
_age = age;
}
Run Code Online (Sandbox Code Playgroud)
相反:
Person::Person(int age) {
this->_age = age;
}
Run Code Online (Sandbox Code Playgroud) 可能重复:
在C++中过度使用此代码气味
多年前,我养成了在访问成员变量时使用this->的习惯.我知道这不是绝对必要的,但我认为它更清楚.
然后,在某些时候,我开始更喜欢更简约的风格,并停止了这种做法......
最近我被一个更年轻的同龄人问到我是否认为这是一个好主意而且我发现我对自己的偏好没有真正的答案...这真的是一个完全风格的选择还是有真正的原因为什么不在成员变量访问前加上this->更好?
最近,我在这里贴一张我的代码,并得到了评论(无关原来的问题),其使用this了类的所有成员函数和属性是"不是简单的个人编码风格的问题,这是不好的做法".不幸的是,这个人拒绝详细说明并告诉我自己查一下.
我用谷歌了一堆(但它真的很难找了什么"这个"作为关键字),并期待在这里,但我只找到一些 例子时this ,必须使用.
我知道使用this不可避免的情况(参数/变量具有相同的名称,模板继承等),但随着时间的推移我开始使用,this因为我可以更轻松,更快地找到我的代码.我的理由包括:
f是否应该是一个成员函数:如果this代码中没有,它可以从类中取出f可以是一个const功能:如果this左边没有,很可能是可以制作const(并不总是,但我觉得它在浏览时很有用)f,或者它是否为复合成员函数(使用this对象操作的成员方法与没有此操作的对象的"外部"算法)this来找到问题,因为其他行不会更改对象坦率地说,关于这种"不良做法"的评论让我感到不安.但是,一个评论本身并不意味着什么,所以我想问一下,this对于所有成员函数和属性使用一致性是否有任何不妥之处?如果是这样,那么将它置于(可能是笨拙的,不受欢迎的或不普遍的)个人风格并将其置于"不良实践"类别中的主要缺点是什么?
我读了这个答案及其评论,我很好奇:有没有理由不使用this/ Self/ Me?
顺便说一句:如果之前有人询问过,我很抱歉,似乎无法this在SO上搜索这个词.
我是一名初学程序员,我在使用C++ OOP方面遇到了很多麻烦.具体来说,今晚我正在尝试编写一个简单的类,它接收事件并在多个图像之间切换,并指向存储在数组中的每个图像.在尝试创建一个返回指向数组本身的指针的"getter"函数时遇到了一个令人困惑的问题.
基本上,我试图做这样的事情:
class SlideShow
{
public:
image *getSlideArray();
private:
image *slideArray[10];
};
Run Code Online (Sandbox Code Playgroud)
所以,我想要一个存储指向每个图像的指针的数组.我还想要一个返回数组本身地址的函数.我在尝试定义getSlideArray()函数时遇到了一个问题...我只是不完全确定它为什么不能正常工作......
这是我最初尝试的,在我的课程'源文件中:
image *SlideShow::getSlideArray()
{
return this->slideArray;
}
Run Code Online (Sandbox Code Playgroud)
在这种尝试中,编译器一直在使用'this'关键字引发问题,说我试图返回的不是之前指定的类型.然而,这是我迄今为止编写getter函数的方式,它通常在使用简单变量时起作用......我怀疑这里存在一些问题,因为'this'是一个指针,'slideArray'是一个指向一个数组的指针,该数组也包含指针......但是我很可怕,现在这种引用的程度超出了我的想象.我花了一段时间才收集对指针的基本理解,使用地址和操作符等引用.指针和指针数组的指针更令人困惑.
我还要提一下,我找到了一个解决方法,我的代码编译.(虽然我不能真正运行它来检查它是否在运行时工作..)我的工作涉及将定义/返回语句添加到类声明本身(在头文件中):
class SlideShow
{
public:
image *getSlideArray() {return *slideArray;);
private:
image *slideArray[10];
};
Run Code Online (Sandbox Code Playgroud)
现在.这编译正确......但是,这也让我感到困惑.我知道通常,当你返回一个数组(比如一个int数组)时,你将返回数组的第0个插槽的地址.但是如果我试图返回一个intArray [5],当它返回时,我会简单地写'intArray',对吗?基本上,我并不感到困惑,为什么我必须在'slideArray'之前添加*在这种情况下......
所以无论我尝试做哪种方式,都让我感到困惑.我知道这里有一些'技巧',它可能与返回指针指针或指针的指针有关,但我只是无法自己解决.我真的希望学习这门课程,这样我才能开始掌握编程,尤其是OOP ......
谁能帮助我更好地理解这一点?
我正在研究 C++ 类。
我基本上是在重新制作我在这里所做的事情,但是在 C++ 中。
它进展顺利,但我不明白错误member reference type 'Human *' is a pointer; did you mean to use '->'?意味着什么。我从未使用过->,也见过*以这种方式使用过(例如const char *),但我不太确定它是如何工作的。
我发现的最接近的问题是这个,但答复没有帮助。
这是我的代码
#include <stdio.h>
#include <cstdlib>
#include <iostream>
using std::cout;
using std::cin;
using std::string;
class Human {
public:
string Name;
int Age;
double Height;
void Initialise(string name, int age, double height) {
this.Name = name; // Error here
this.Age = age; // Error here
this.Height = …Run Code Online (Sandbox Code Playgroud)