• 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;
    }
  • 相关阅读:
    python 将字符串作为脚本运行
    Django Model获取字段名称并转为List存储
    django 过滤查询
    django 视图中异步执行python脚本
    python 异步执行python脚本
    django 筛选不等于的内容
    phpstorm中快速添加函数注释
    搜索模板elasticsearch
    laravel模型关联
    laravel关联用户
  • 原文地址:https://www.cnblogs.com/do-your-best/p/11167853.html
Copyright © 2020-2023  润新知