.*操作符在c++中做什么?

visual What does .* operator do in C++?

本文关键字:什么 c++ 操作符      更新时间:2023-10-16

a.*b运算符在c++中做什么?我找到了这个参考资料:"对象a的成员b指向的对象",但在下面的例子中不起作用:

class Color {
    public:
    int red,green,blue;
    Color():red(255), green(255), blue(255){}
    Color(int red, int green, int blue) :red(red), green(green), blue(blue){}
    void printColor(){
        cout << "Red:" << red << "  Green:" << green << "  Blue:" << blue << endl;
    }
};
class Chair{
    public:
    Color* color;
    private:
    int legs;
    float height;
    public:
    Chair(int legs, float height):legs(legs), height(height){
        color = new Color(255, 0 , 0);
    }
    void printChair(){
        cout << "Legs: " << getLegs() << " , height: " << getHeight() << endl;
    }
    int getLegs() { return legs; }
    float getHeight(){ return height; }
    Chair& operator+(Chair& close_chair){
        this->legs += close_chair.getLegs();
        this->height += close_chair.getHeight();
        return *this;
    }
};
int main(){
     Chair my_chair(4, 1.32f);
     my_chair.*color.printColor();
     return 0;
}

当我使用my_chair.*color.printColor();在main中,我得到'color':未声明的标识符。我在Visual Studio中运行这个例子。

谢谢。

.*是解引用一个指向成员的指针,但您只是想解引用一个成员指针。为此,使用->:

my_chair.color->printColor();
(*(my_chair.color)).printColor(); //same thing

在你的例子中使用.*看起来像:

auto colorP = &Chair::color;
(my_chair.*colorP)->printColor();

如果您想取消对color成员的引用,请执行以下操作:

my_chair.color->printColor();

(*my_chair.color).printColor();

操作符.*解引用指向成员的指针。

指向成员的指针——"成员指针"——不同于成员是指针。
它不指向类的特定实例,所以你需要一个与"指针"相关的实例。

的例子:

struct A
{
    int x;
    int y;
};
int main()
{
    A a{1, 78};
    // Get a pointer to the x member of an A
    int A::* int_member = &A::x;
    // Prints a.x
    std::cout << a.*int_member << std::endl;
    // Point to the y member instead
    int_member = &A::y;
    // Prints a.y
    std::cout << a.*int_member << std::endl;    
}