博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

继承(基本问题)

Posted on 2011-02-26 22:50  红波  阅读(135)  评论(0)    收藏  举报

许久没有用到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;
}