C++ 十五课 继承

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/clksjx/article/details/88850625

继承

父类:

  • base class
  • super class
  • parent class

子类:

  • derived class
  • sub class
  • child class
class A{
public:
    A(int ii):i(ii) { cout<< "A::A()"<<endl;}
    ~A() { cout << "A::~A()"<<endl;}
    void print() { cout<<"A::print()"<<i<<endl;}
protected:
    void setI(int i) { this->i = i;}
private:
    int i;
}

class B : public A {
public:
    B():A(15){}//子类构造函数的初始化列表需要包括父类的初始化,父类初始化放在最前,之后的变量初始化按照在类中出现的顺序放置
    void f() 
    { 
        setI(20);//子类可以访问父类的protected成员
        //i = 30;//子类不可访问父类的private成员
        print();
    }
}



int main(){
    B b;//自动调用父类的构造函数
    //b.set(10);//外人不可使用protected成员
    b.print();
    b.f();
    return 0;
}

构造时,先构造父类。析构时,先析构子类。

父类与子类的调用关系

如果子类中有与父类函数名相同的成员函数,当子类想调用父类的函数,可在函数名前加父类名::,作以区分。

函数重载

函数具有相同的函数名,但具有不同的参数。

defeult arguments

在函数声明时,可以给参数赋值。如果函数被调用时没有这个参数(如f(2)),则该参数在函数中将使用默认值(f(2,0))。

f(int a, int b = 0);

注意:

  • 默认参数要从最右面的参数写,不能为a设置了默认参数,而b没有。
  • 尽量不要使用default argument,以减少阅读难度和不安全性

猜你喜欢

转载自blog.csdn.net/clksjx/article/details/88850625
今日推荐