c++基类成员在派生类中的访问控制

来源:互联网 发布:数据标注 编辑:程序博客网 时间:2024/06/16 10:48

公用继承:基类成员保持自己的访问级别;

受保护继承:基类的public和protected成员在派生类中为protected成员

私有继承:基类的所有成员在派生类中为private成员。


接口继承与实现继承;

public派生类继承基类的接口,它具有与基类相同的接口。涉及良好的类层次中,public派生类的对象可以用在任何需要基类对象的地方。

使用private或protected派生的类不继承基类的接口,相反,这些派生通常被称为实现继承。派生类在实现中使用被继承类但继承基类的部分并未成为其接口的一部分。


继承和组合:

继承,定义一个类作为另一个类的公用派生类时,派生类应反映与基类的“是一种”关系。

组合,反映了“有一个”的关系,或则是包含,成员关系。


注意:

派生类可以恢复继承成员的访问级别,但不能使访问级别比基类中原来指定的更加严格或更加宽松。

eg:class Base {

public:

std::size_t  size() const { return n;}

protected:

std::size_t n;

};

class Derived : private Base{……}

在这一继承层次中,size在Base中为public, 但在Derived中为private。为了使size在Derived中成为public,可以在Derived的public部分增加一个using声明。如下这样改变Derived的定义,可以使size成员你呢狗狗被用户访问,并使n能够被从Derived派生的类访问:

class Derived : private Base {

public:

using Base::size;

protected:

using Base::n;

};

struct 与class保留字定义的类具有不同的默认访问级别。同样默认继承访问级别根据使用哪个保留字定义派生类也不相同。

struct的默认继承访问级别为public,成员的默认访问级别也使public

class的默认继承访问级别为private,成员的默认访问级别也是private;

struct与class定义的类唯一的不同知识偶人的成员保护级别和默认的派生保护级别。没有其他区别。

c和c++结构体struct的区别:

C中的结构体和C++中结构体的不同之处:在C中的结构体只能自定义数据类型,结构体中不允许有函数,而C++中的结构体可以加入成员函数。

C++中的结构体和类的异同:

一、相同之处:结构体中可以包含函数;也可以定义public、private、protected数据成员;定义了结构体之后,可以用结构体名来创建对象。但C中的结构体不允许有函数;

              也就是说在C++当中,结构体中可以有成员变量,可以有成员函数,可以从别的类继承,也可以被别的类继承,可以有虚函数。

二、不同之处:结构体定义中默认情况下的成员是public,而类定义中的默认情况下的成员是private的。类中的非static成员函数有this指针,(而struct中没有是错误的,一直被误导啊,经过测试struct的成员函数一样具有this指针),类的关键字class能作为template模板的关键字 即template<class T> class A{}; 而struct不可以。

实际上,C中的结构体只涉及到数据结构,而不涉及到算法,也就是说在C中数据结构和算法是分离的,而到C++中一类或者一个结构体可以包含函数(这个函数在C++我们通常中称为成员函数),C++中的结构体和类体现了数据结构和算法的结合。


原创粉丝点击