【C++】:继承[下篇](友元&&静态成员&&菱形继承&&菱形虚拟继承)

07-16 1435阅读

目录

  • 一,继承与友元
  • 二,继承与静态成员
  • 三,复杂的菱形继承及菱形虚拟继承
  • 四,继承的总结和反思

    点击跳转上一篇文章: 【C++】:继承(定义&&赋值兼容转换&&作用域&&派生类的默认成员函数)

    一,继承与友元

    友元关系不能继承,也就是说基类友元不能访问子类私有和保护成员 。

    【C++】:继承[下篇](友元&&静态成员&&菱形继承&&菱形虚拟继承)

    二,继承与静态成员

    基类定义了static静态成员,则整个继承体系里面只有一个这样的成员。无论派生出多少个子类,都只有一个static成员实例 。

    class Person
    {
    public:
    	Person() { ++_count; }
    protected:
    	string _name; // 姓名
    public:
    	static int _count; // 统计人的个数。
    };
    int Person::_count = 0;
    class Student : public Person
    {
    protected:
    	int _stuNum; // 学号
    };
    int main()
    {
    	Person p;
    	Student s;
    	cout 
    public:
    	string _name; // 姓名
    	int _id;
    	int _tel;
    	string _adress;
    };
    class Student : public Person
    {
    protected:
    	int _num; //学号
    };
    class Teacher : public Person
    {
    protected:
    	int _id; // 职工编号
    };
    class Assistant : public Student, public Teacher
    {
    protected:
    	string _majorCourse; // 主修课程
    };
    int main()
    {
    	//数据冗余和二义性
    	Assistant a;
    	//a._name = "小李";
    	//a._name = "李老师";
    	//1.指定类域
    	a.Student::_name = "小李";
    	a.Teacher::_name = "李老师";
    }
    
    	//继承代码续接上……
    	//1.指定类域
    	a.Student::_name = "小李";
    	a.Teacher::_name = "李老师";
    }
    
    public:
    	string _name; // 姓名
    	int _id;
    	int _tel;
    	string _adress;
    };
    class Student : virtual public Person
    {
    protected:
    	int _num; //学号
    };
    class Teacher : virtual public Person
    {
    protected:
    	int _id; // 职工编号
    };
    class Assistant : public Student, public Teacher
    {
    protected:
    	string _majorCourse; // 主修课程
    };
    int main()
    {
    	Assistant a;
    	a.Student::_name = "小李";
    	a._name = "小李";
    	a._name = "李老师";
    	return 0;
    }
    

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]