自从我使用C ++继承以来已经有一段时间了,我想知道是否有人可以向我阐明和解释一些东西:
class parent {
public:
int count;
parent() : count(0) {}
void increase_count() {count++;}
void print_count() {printf("Count: %d\n", count);}
};
class child : public parent {
private:
int other;
public:
child() : other(0) {}
};
int main (int argc, char *argv[]) {
child c;
for (int i = 0; i < 5; i++) {
c.print_count();
c.increase_count();
}
for (int i = 0; i < 5; i++) {
c.parent::print_count();
c.parent::increase_count();
}
}
看来
c.<parent_function>()
和c.parent::<parent_function>()
是相同的。该语法仅存在于多重继承吗?还是有些细微之处,即使没有多重继承,parent::
范围说明符也会有所不同?编辑:道歉,但我还打算规定孩子不要使用同名的方法。
最佳答案
看起来c。()和c.parent::()是相同的。
仅当child
没有相同名称的功能时,它们才是相同的。
该语法仅存在于多重继承吗?
否。有时候您需要在父类中调用函数的实现。
还是有些细微之处,即使没有多重继承,parent ::范围说明符也会有所不同?
是。
例:
#include <iostream>
class parent {
public:
virtual void print() const
{
std::cout << "In parent::print()\n";
}
};
class child : public parent {
public:
virtual void print() const
{
std::cout << "In child::print()\n";
}
};
void print(parent& p)
{
p.print(); // Goes to child::print() when p references a child
p.parent::print(); // Goes to parent::print() regardless
}
int main()
{
child c;
print(c);
}
输出量
In child::print()
In parent::print()
另外,有时您需要从子级的实现中调用
virtual
成员函数的父级实现。例:
#include <iostream>
class parent {
public:
virtual void save(std::ostream& out) const
{
// Save the data corresponding to this class.
}
};
class child : public parent {
public:
virtual void save(std::ostream& out) const
{
// Save the data corresponding to parent first.
parent::save(out);
// Save the data corresponding to this class.
}
};
void save(parent& p, std::ostream& out)
{
p.save(std::cout); // Calls child::save() when p references a child,
// which in turn calls parent::save()
}
int main()
{
child c;
save(c, std::cout);
}