zoukankan      html  css  js  c++  java
  • C++类继承方式及实践

    直接上图:

    以及:

    实践如下:

    #include <iostream>
    using namespace std;
    
    
    class Father{
    
        private:
            int father1;
            int getFather1Private(){
                return this->father1;
            }
    
        protected:
            int father2;
            int getFather2Protected(){
                return this->father2;
            }
        public:
            int father3;
            Father(){
                this->father1 = 11;
                this->father2 = 10;
                this->father3 = 22;
                cout<< "无参构造器"<<endl;
            }
            // 基类构造器要加virtual的原因:
            // 这是因为当用基类引用派生类的时候,如果此时对基类进行delete操作,对于没有虚函数析构函数,那么只会调用基类的析构函数,而对派生类的析构函数不会进行析构
            virtual ~Father(){
                cout<< "Father析构函数"<<endl;
            }
            Father(int aa){
                this->father1 = aa;
                this->father2 = 10;
                this->father3 = 22;
                cout<< "有参构造器"<<endl;
            }
            int getFather1(){
                return father1;
            }
            int getFather2(){
                return father2;
            }
            int getFather3(){
                return this->father3;
            }
    };
    
    class Son : public Father{
    
        private:
            int son1;
    
        public:
            Son(){
                this->son1 = 11;
            }
            ~Son(){
                cout<< "Son析构函数"<<endl;
            }
            // 通过这样的方式调用父类构造器
            Son(int fatherV, int sonV):Father(fatherV){
                 Father::father3 = fatherV;
                this->son1 = sonV;
    
            }
            int method(){
                int value = son1 * Father::father3;
                return value;
            }
            int getSon1(){
                return son1;
            }
    
    };
    
    
    int main(){
    
        cout << "类继承实践:" << endl;
    
        // 调用无参构造器
        Son son1;
    
        // 有参构造器
        Son son(121,222);
    
        // 在类外部仅有父类的public可以访问
            // error: cout << "son.getFather1Private():" << son.getFather1Private() << endl;
            // error: cout << "son.getFather2Protected():" << son.getFather2Protected() << endl;
        cout << "son.getFather1():" << son.getFather1() << endl;
        cout << "son.getFather2():" << son.getFather2() << endl;
    
        cout << "son.father3:" << son.father3 << endl;
        // error: cout << "son.father2:" << son.father2 << endl;
    
        cout << "son.getSon1():" << son.getSon1()<< endl;
    
        //cout << "son.father3:" << son.son1 << endl;
        cout << "son.method():" << son.method() << endl;
    
    
        // https://blog.csdn.net/u014453898/article/details/60402586
        // 这是因为当用基类引用派生类的时候,如果此时对基类进行delete操作,对于没有虚函数析构函数,那么只会调用基类的析构函数,而对派生类的析构函数不会进行析构
        Father *ptr = new Son();
        cout << "泛型:" << ptr->father3 << endl;
        delete ptr;
    
        cout << "类继承 实践 end." << endl;
    
        return 0;
    }
  • 相关阅读:
    在内部局域网内搭建HTTPs
    如何创建自己的Nuget包
    Scratch入门
    灰度发布 & 蓝绿部署
    .net异步方法初探
    [转]批处理静默自动安装证书
    住院病案首页数据填写质量规范(暂行)
    DRGs
    【规范】电子病历系统功能规范(试行)
    Red Hat Enterprise Linux 8配置YUM源的两种方式
  • 原文地址:https://www.cnblogs.com/do-your-best/p/11167853.html
Copyright © 2011-2022 走看看