I recently used a library that allows the following type of syntax:
MyClass myObject;
myObject
.setMember1(\"string value\")
.setMember2(4.0f)
.s
It's called a fluent api. It's not bad practice, just a different style of programming.
The biggest drawbacks (IMO) would be that since you are returning a reference to yourself, you can't return anything else and it can be difficult to debug fluent statements since they are seen by the compiler as one giant "line" of code.
I'm not sure if it's considered bad practice or not, but one implication is that you can no longer return error codes, so you're either forced to use exceptions or ugly error objects passed in by reference. Exceptions are sometimes the right solution, but often aren't since they can be expensive to throw and are disabled on some platforms.
I really think it's a stylistic thing though, and because of C++'s close relationship with C both in syntax and culture, many C++ programmers like error codes and so will prefer returning them instead of returning a reference. But I've seen return of *this often as well and I don't think it's bad practice.
Not bad practice, in fact you see it often with output streams in order to concatenate multiple strings and values.
Only disadvantage that I see is that it prevents you from returning anything else, though if it's a set method, it shouldn't matter.