C++继承的访问修饰符与静态

#include <iostream>
using namespace std;

class A
{
    
    
    public:
        A() : a1_(0), a2_(0), a3_(0)
        {
    
    
            cout << "class A default constructor" << endl;
        }
    
        A(int a1, int a2, int a3) : a1_(a1), a2_(a2), a3_(a3)
        {
    
    
            cout << "class A constructor" << endl;
        }
        ~A()
        {
    
    
            cout << "class A destructor" << endl;
        }
        static int const s1;
        int a1_;
    protected:
        static int const s2;
        int a2_;
    private:
        int a3_;
};
int const A::s2 = 345;
class B : public A
{
    
    
    public:
        int b0_;
        B() : A(), b1_(0), b2_(0), b3_(0)
        {
    
    
            cout << "class B default constructor" << endl;
            b0_ = A::s2;
        }
        B(int a1, int a2, int a3, int b1, int b2, int b3) : A(a1, a2, a3), b1_(b1), b2_(b2), b3_(b3)
        {
    
    
            cout << "class B constructor" << endl;
        }
        ~B()
        {
    
    
            cout << "class B destructor" << endl;
        }
        int b1_;
    protected:
        int b2_;
    private:
        int b3_;
};

int const A::s1 = 123;


int main() {
    
    
    
    cout <<"s1:"<< A::s1;
    cout << "s1:" <<B::s1<<endl;
    cout << "---create a1-------\n";
    A a1;
    cout << "---create a1-------\n";
    B b1;
    cout << "b0_(static protect A::s2) " << b1.b0_<<endl;
    cout << "a1.s1,b1.s1\n";
    cout << a1.s1;
    cout << b1.s1 << endl;
    cout << "____________\n";
    b1.a1_ = 333;
    a1.a1_ = 666;
    cout << a1.a1_;
    cout << b1.a1_;
    
    /*
    while (1) {
        ;
    }
    */

    return 0;
}

猜你喜欢

转载自blog.csdn.net/m0_45311187/article/details/120879439
今日推荐