类继承后的属性变化

 2023-05-17 09:36:28  阅读 0

类可以继承,继承的方式多种多样,之前提到过共有继承,即通过public关键字来继承。除此之外还存在另外两种方式来继承,即private和protected。通过不同的方式继承后,类中原本的属性会发生一定的变化,具体如下:

 

继承方式 public private protected
public public private protected
private private private private
protected protected private protected

 

 

在日常的使用时,最多的是public的继承方式。

 

具体在使用的时候,不同的属性会造成不同的影响。

 

· 在类中的时候所有的属性和行为相互之间都是可以直接做访问的,即在类中是没有权限的概念的。但是,在继承后具体化使用的时候会存在权限问题。在具体化时,无法直接访问私有属性和保护属性即private和protected。继承的时候也存在权限问题,私有属性在派生(被继承的过程也叫做派生)类中是无法直接访问的,但是此私有属性在派生类的也是依然存在的。但是保护属性和公有属性在派生类中是可以直接访问的。

 

如下:

 

class Animal {
private:
    int height;
protected:
    int weight;
public:
    void showAnimal() {
        cout << "height:" << height << " "
            << "weight:" << weight << endl;
    }
};
​
class Dog :public Animal {
public:
    void showDog() {
        cout << weight << endl;
    }
};
​
int main() {
    cout << sizeof(Animal) << endl;
    cout << sizeof(Dog) << endl;
    return 0;
}

 

在上述的情况中,Dog类继承了Animal类,但是在Animal中是无法访问height属性的。通过sizeof可以查看类的大小,此时两者的大小是相同的,说明在Dog类中存在了和Animal类中相同的属性。

 

· 派生类中如果存在和父类相同的函数,但是函数具体内容存在区别时,子类(派生类)中的同名函数叫做对父类同名函数的重写。

重写不会增加新的函数,而是对原先继承过来的函数做出修改。

 

· 子类(派生类)中的属性对外依然是私有和保护无法直接访问,共有可以直接访问。

 

· struct和class在C++中都表示类,但是其默认的属性不同。class不直接表明属性,则默认为私有,struct中不写明时则默认为公有

上一篇: 类的继承
标签:

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码