【c++】面向对象三大特性之——继承(菱形继承详细讲解)
小编个人主页详情 public: void Print() { cout protected: int _stuid = 111111; }; class teacher :public person { protected: int _teaid = 222222; }; int main() { student s; teacher t; s.Print(); t.Print(); return 0; } protected: int _stuid = 111111; }; public: void Print() { cout public: void fun() { _age = 20; Print(); } protected: int _stuid = 111111; }; int main() { student s; s.fun(); s.Print(); return 0; } public: void Print() { cout public: void fun() { _age = 21; Print(); } protected: int _stuid = 111111; }; int main() { student s; s.fun(); return 0; } public: int _age = 18; string _name = "xiaowang"; }; class student :public person { protected: int _stuid = 111111; }; int main() { person p; student s; s._age = 20; s._name = "zhangshan"; p = s; person* ptr = &s; person& rp = s; return 0; } public: void fun() { cout public: void fun() { person::fun(); cout student s; s.fun(); return 0; } public: Person(const char* name = "peter") : _name(name) { cout public: Student(const char* name,int id) :_id(id) { cout Student s("zhangshan", 111111); return 0; } public: Person(const char* name) : _name(name) { cout public: Student(const char* name,int id) :Person(name) ,_id(id) { cout Student s("zhangshan", 111111); return 0; } public: Person(const char* name = "peter") : _name(name) { cout cout public: Student(const char* name,int id) :Person(name) ,_id(id) { cout cout Student s("zhangshan", 111111); Student s1(s); return 0; } public: Person(const char* name = "peter") : _name(name) { cout cout cout public: Student(const char* name,int id) :Person(name) ,_id(id) { cout cout cout Person::operator=(s);//这里必须使用基类::operator=的方式进行调用 _id = s._id; //如果直接调用operaotr=会产生一直去调用派生类的 } //operator=引发无穷递归调用,导致栈溢出 return *this; } protected: int _id; }; int main() { Student s("zhangshan", 111111); Student s1(s); Student s2("lisi", 222222); s1 = s2; return 0; } public: Person(const char* name = "peter") : _name(name) { cout cout cout cout public: Student(const char* name,int id) :Person(name) ,_id(id) { cout cout cout Person::operator=(s); _id = s._id; } return *this; } ~Student() { cout Student s("zhangshan", 111111); Student s1(s); Student s2("lisi", 222222); s1 = s2; return 0; } friend void Print(const Person& p); public: protected: int _age = 18; private: string _name = "xiaowang"; }; void Print(const Person& p) { cout friend void Print(const Person& p); public: protected: int _stuid = 111111; }; int main() { Student s; Person p; Print(p); Print(s); return 0; } public: Person() { _count++; } static int _count; }; int Person::_count = 0; class Student :public Person { public: Student() {} }; int main() { Person p; Student s1; Student s2; Student s3; cout public: int _a; }; class B : public A { public: int _b; }; class C :public B { public: int _c; }; int main() { C c; c._a = 1; c._b = 2; c._c = 3; return 0; } public: int _a; }; class B { public: int _b; }; class C :public A, public B { public: int _c; }; int main() { C c; c._a = 1; c._b = 2; c._c = 3; return 0; } public: int _a; }; class B: public A { public: int _b; }; class C : public A { public: int _c; }; class D :public B, public C { public: int _d; }; int main() { D d; return 0; } D d; d.B::_a = 1; d.C::_a = 2; return 0; } public: int _a; }; class B : virtual public A { public: int _b; }; class C : virtual public A { public: int _c; }; class D :public B, public C { public: int _d; }; int main() { D d; d.B::_a = 1; d.C::_a = 2; d._a = 3; return 0; } }; class B:public A//B和A是继承关系,B继承了A {}; class C//A和C是组合关系,C组合了A { private: A _a; };