C++ 继承和派生

1 继承概念
1)继承是类之间定义的一种重要关系;
2)基本语法:class Child : public Parent1,public Parent2;
3)Parent称基类(父类),child称派生类(子类)
4) 继承方式:public,private,protected.
5)重要说明:
a)子类拥有父类的所有成员变量和成员函数;
b)子类可以拥有父类没有的方法和属性;
c)子类就是一种特殊的父类;
d)子类对象可以当作父类对象使用, 即可以使用父类的成员变量和成员函数;

2 子类的访问控制
1)子类继承了基类的全部成员变量和成员方法(除了构造和析构),但是这些成员的访问属性,在派生过程中是可以调整的。
2)不同的继承方式会改变继承成员的访问属性
a) public继承:父类成员在子类中保持原有访问级别
b) private继承:父类成员在子类中变为private成员
c) protected继承:父类中public成员会变成protected,父类中protected成员仍然为protected,父类中private成员仍然为private。
3)“三看”原则
a)看调用语句,这句话写在子类的内部、外部;
b)看子类如何从父类继承(public、private、protected)
c)看父类中的访问级别(public、private、protected)
4)访问级别设置的原则
a)需要被外界访问的成员直接设置为public
b)能在当前类中访问的成员设置为private
c)只能在当前类和子类中访问的成员设置为protected,protected成员的访问权限介于public和private之间。

3 继承中的构造和析构
1)类型兼容性原则
a)指在需要基类对象的任何地方,都可以使用公有派生类(子类)的对象来替代。
b)子类对象可以当作父类对象使用;
c) 子类对象可以直接赋值给父类对象
d) 子类对象可以直接初始化父类对象
e)父类指针可以直接指向子类对象
f)父类引用可以直接引用子类对象

#include <cstdlib> 
#include <iostream> 
using namespace std; 

class Parent03 
{ 
protected: 
     const char* name; 
public: 
     Parent03() 
     { 
               name = "Parent03"; 
     } 

     void printP() 
     { 
               cout<<"Name: "<<name<<endl; 
     } 
}; 

class Child03 : public Parent03 
{ 
protected: 
     in
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我会尽力回答你关于C++继承派生的问题。 首先,让我们考虑一个基础类——人员类(People),它应该包括人员的基本属性,例如姓名、性别、年龄等等。我们可以定义如下的类: ```c++ class People { public: People(string name = "", char gender = ' ', int age = 0) : m_name(name), m_gender(gender), m_age(age) {} void setName(string name) { m_name = name; } void setGender(char gender) { m_gender = gender; } void setAge(int age) { m_age = age; } string getName() const { return m_name; } char getGender() const { return m_gender; } int getAge() const { return m_age; } private: string m_name; char m_gender; int m_age; }; ``` 接下来,我们可以从人员类派生出学生类(Student)。学生类应该包括人员类的所有属性,同时还应该包括学生特有的属性,例如学号、班级等等。我们可以定义如下的类: ```c++ class Student : public People { public: Student(string name = "", char gender = ' ', int age = 0, int studentID = 0, string className = "") : People(name, gender, age), m_studentID(studentID), m_className(className) {} void setStudentID(int studentID) { m_studentID = studentID; } void setClassName(string className) { m_className = className; } int getStudentID() const { return m_studentID; } string getClassName() const { return m_className; } private: int m_studentID; string m_className; }; ``` 在学生类中,我们使用了关键字 `public`,这意味着学生类继承了人员类的所有公有成员。因此,在学生类的构造函数中,我们可以通过调用人员类的构造函数来初始化人员类的数据成员。 在学生类中,我们还定义了学生特有的数据成员,例如 `m_studentID` 和 `m_className`。我们还定义了一些成员函数,用于设置和获取这些数据成员。 使用上述代码,我们可以创建人员对象和学生对象,并使用它们的成员函数来设置和获取它们的属性。例如: ```c++ People p("Tom", 'M', 20); Student s("Alice", 'F', 18, 12345, "Class 1"); cout << p.getName() << " " << p.getGender() << " " << p.getAge() << endl; cout << s.getName() << " " << s.getGender() << " " << s.getAge() << " " << s.getStudentID() << " " << s.getClassName() << endl; ``` 输出结果为: ``` Tom M 20 Alice F 18 12345 Class 1 ``` 希望这个例子对你理解C++继承派生有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值