许久没有用到c++的继承等,业精于勤荒于嬉。现在需要写一个模型,要求基类中提供若干算法,该算法中调用的函数的实现随不同的子类模型不同,自己写了下测试代码,并翻了一下Effective C++,已然忘了书中的教导了,需要好好温习一下
总共验证了以下几点:
1、 基类的私有变量和函数,子类不能调用(too simple, 但已记不清了,并不是说公有继承能访问public类型,私有继承就可以访问私有对象了)
2、 如何实现父类可以调用子类中的函数?父类中函数声明为virtual,定义中返回this->printb();那么在调用A类的时候可以实现调用B类中的相关实现
3、 如果确定要重载某函数,请在基类中声明为 virtual(看书看的,才知道自己原来的想法有那么多的问题,需要温故而知新了)
#include <iostream>
class A
{
private:
int m_a;
public:
virtual void printb();
void printall();
A(int a):m_a(a){}
virtual ~A(){}
private:
void printa();
};
void A::printa()
{
std::cout << "a: " << m_a << std::endl;
}
void A::printb()
{
this->printb();
}
void A::printall()
{
printa();
printb();
}
class B: public A
{
private:
int m_b;
public:
B(int a, int b):A(a), m_b(b){}
virtual ~B(){}
private:
void printb();
};
void B::printb()
{
std::cout << "b: " << m_b << std::endl;
}
int main()
{
B cb(3, 6);
cb.printall();
return 0;
}
浙公网安备 33010602011771号