标签: member-functions

为什么在非const的私有时不调用公共const方法?

考虑以下代码:

struct A
{
    void foo() const
    {
        std::cout << "const" << std::endl;
    }

    private:

        void foo()
        {
            std::cout << "non - const" << std::endl;
        }
};

int main()
{
    A a;
    a.foo();
}
Run Code Online (Sandbox Code Playgroud)

编译器错误是:

错误:'void A :: foo()'是私有的.

但是当我删除私有它时它才起作用.为什么在非const的私有时不调用public const方法?

换句话说,为什么在访问控制之前会出现重载决策?这很奇怪.你认为它是一致的吗?我的代码工作,然后我添加一个方法,我的工作代码根本不编译.

c++ overloading member-functions overload-resolution

114
推荐指数
11
解决办法
7027
查看次数

运算符重载:成员函数与非成员函数?

我读到一个声明为成员函数的重载运算符是非对称的,因为它只能有一个参数而另一个自动传递的参数是this指针.所以没有比较它们的标准.另一方面,声明为a的重载运算符friend对称的,因为我们传递两个相同类型的参数,因此可以对它们进行比较.

我的问题是,当我仍然可以将指针的左值与参考值进行比较时,为什么会选择朋友?(使用非对称版本提供与对称相同的结果)为什么STL算法仅使用对称版本?

c++ operator-overloading member-functions friend-function non-member-functions

107
推荐指数
2
解决办法
9万
查看次数

error:为参数1指定的默认参数

我收到此错误消息,代码如下:

class Money {
public:
    Money(float amount, int moneyType);
    string asString(bool shortVersion=true);
private:
    float amount;
    int moneyType;
};
Run Code Online (Sandbox Code Playgroud)

首先,我认为默认参数不允许作为C++中的第一个参数,但允许使用.

c++ function member-functions default-arguments

83
推荐指数
2
解决办法
7万
查看次数

编译器为类创建的所有成员函数是什么?这会一直发生吗?

编译器为类创建的所有成员函数是什么?这会一直发生吗?像析构函数.我担心的是它是否为所有类创建,为什么需要默认构造函数?

c++ c++-faq member-functions

58
推荐指数
1
解决办法
3万
查看次数

为什么某些运算符只能作为成员函数重载,其他作为友元函数,其余的作为两者?

为什么某些运算符只能作为成员函数重载,其他作为非成员"自由"函数,其余的作为两者?

这些背后的理由是什么?

如何记住哪些运营商可以超载(成员,免费或两者)?

c++ class operator-overloading member-functions

45
推荐指数
3
解决办法
9419
查看次数

C++ struct可以有成员函数吗?

我对结构和类之间的区别感到非常困惑,因为我似乎看到它们用于几乎相同的东西.我搜索了差异,我看到的唯一答案是默认情况下结构体有公共成员,默认情况下类有私有成员.但是,我的讲师刚刚告诉我结构不能包含成员函数.但我在互联网上看到很多线程,其中人们在结构中包含成员函数,并且具体说这样做是可以的.

我的讲师似乎坚持认为结构定义不具备功能,所以发生了什么?我唯一能想到的是,编译器可能会将结构中的函数更改为其他内容,以便它们在技术上不包含函数......这些矛盾是否有明确的答案?

c++ struct class member-functions

40
推荐指数
3
解决办法
6万
查看次数

C++ volatile成员函数

class MyClass
{
    int x, y;
    void foo() volatile {
        // do stuff with x
        // do stuff with y
    }   
};
Run Code Online (Sandbox Code Playgroud)

我是否需要声明x并将其y视为volatile或将成为volatile自动处理的所有成员变量?

我想确保"stuff with x"不会y被编译器的"stuff with " 重新排序.

编辑:如果我将正常类型转换为volatile类型会发生什么?这是否会指示编译器不重新排序对该位置的访问?我想在特殊情况下将一个普通变量传递给一个参数是volatile的函数.我必须确保编译器不会使用先前或后续的读写重新排序该调用.

c++ volatile member-functions

39
推荐指数
3
解决办法
2万
查看次数

有效的C++项目23首选非成员非友元函数到成员函数

虽然对类设计中的一些事实感到困惑,特别是函数是否应该是成员,但我查看了有效的c ++并找到了第23项,即将非成员非友元函数更喜欢成员函数.第一手阅读Web浏览器示例有一定意义,但是该示例中的便捷函数(在本书中命名为非成员函数)会改变类的状态,不是吗?

  • 所以,第一个问题,他们不应该成为会员吗?

  • 进一步阅读,他认为STL函数,实际上某些类没有实现的函数是在stl中实现的.继他们演变成被包装到一些合理的命名空间,如一些便利功能,这本书的想法std::sort,std::copyalgorithm.例如,vector类没有sort函数,并且使用stl sort函数,因此它不是向量类的成员.但是也可以将相同的推理延伸到向量类中的某些其他函数,例如,assign这样也不能作为成员实现,而是作为便利函数实现.但是,这也会改变对象的内部状态,例如它操作的排序.那么这个微妙但重要(我猜)问题背后的理由是什么呢?

如果你有权访问这本书,你可以为我澄清这些要点吗?

c++ encapsulation member-functions effective-c++ non-member-functions

35
推荐指数
4
解决办法
1万
查看次数

"错误:非静态成员引用必须与特定对象相关"是什么意思?

int CPMSifDlg::EncodeAndSend(char *firstName, char *lastName, char *roomNumber, char *userId, char *userFirstName, char *userLastName)
{
    ...

    return 1;
}

extern "C"
{
    __declspec(dllexport) int start(char *firstName, char *lastName, char *roomNumber, char *userId, char *userFirstName, char *userLastName)
    {
        return CPMSifDlg::EncodeAndSend(firstName, lastName, roomNumber, userId, userFirstName, userLastName);
    }
}
Run Code Online (Sandbox Code Playgroud)

在线return CPMSifDlg::EncodeAndSend我有一个错误:错误:非静态成员引用必须相对于特定对象.

这是什么意思?

c++ dll compiler-errors member-functions

33
推荐指数
3
解决办法
14万
查看次数

std :: mem_fun vs std :: mem_fn

std::mem_fun和之间有什么区别std::mem_fn?为什么命名如此令人困惑?

Boost的文档说在大多数情况下std::mem_fn都可以替代std::mem_fun.那你在什么情况下仍会使用std::mem_fun

c++ std member-functions c++11

30
推荐指数
1
解决办法
8601
查看次数