gpt4 book ai didi

c++ - 访问不同类的函数

转载 作者:行者123 更新时间:2023-11-28 05:41:34 25 4
gpt4 key购买 nike

我正在尝试通过访问来自 3 个不同类的 3 个不同函数(它们具有相同的名称)来更新数字的值,使其变为 30。你能帮我么 ?我必须使用 D 类中的函数。我尝试创建 3 个不同的对象并将函数应用于每个对象,但它不起作用

using namespace std;

int callA=0;
int callB=0;
int callC=0;
class A
{
protected:
void func(int & a)
{
a=a*2;
callA++;
}
};

class B
{
protected:
void func(int & a)
{
a=a*3;
callB++;
}
};

class C
{
protected:
void func(int & a)
{
a=a*5;
callC++;
}
};

class D
{
int val;
public:
//Initially val is 1
D()
{
val=1;
}

//Implement this function
void update_val(int new_val)
{

A a;
B b;
C c;
c.func(b);
b.func(a);


}
};

最佳答案

您不能从 D 类访问 A、B、C 类的 func 方法,因为它们是 protected 。

要访问类的 protected 方法,您的类应该是友元类或派生类。否则,您需要将他们的可见性设置为公开。

更多信息请阅读here

使用派生类,这应该可行;

using namespace std;

int callA=0;
int callB=0;
int callC=0;
class A
{
protected:
void func(int & a)
{
a=a*2;
callA++;
}
};

class B
{
protected:
void func(int & a)
{
a=a*3;
callB++;
}
};

class C
{
protected:
void func(int & a)
{
a=a*5;
callC++;
}
};

class D : public A, public B, public C
{
int val;
public:
//Initially val is 1
D()
{
val=1;
}

//Implement this function
void update_val(int new_val)
{
// if new_val is '1'
//now you can call func methods;
A::func(new_val);
B::func(new_val);
C::func(new_val);
// then if you print new_val it is '30'
// c.func(b); // You can't pass b. b isn't an integer
// b.func(a); // idem


}
};

//.....//

int main(){
D d;
d.update_val(1);
}

关于c++ - 访问不同类的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36979051/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com