c++继承相关总结

1、三种继承说明:


2、继承的一般格式:

class Student
{
public:
	Student(int id, char *name)
	{
		this->name = name;
		this->id = id;
	}

	void printS()
	{
		cout << "id =  " << id << " name  =" << name << endl;
	}

private:
	string name;
	int id;
};

class Student2 : public Student
{
public:
	Student2(int id, char * name, int score) : Student(id, name)//子类继承过来的成员变量 通过父类的构造器来构造,会调父类的构造函数
	{
		this->score = score;
	}

	void printS()
	{
		Student::printS();// 先调用父类中的方法
		cout << "score = " << this->score << endl;
	}
private:
	int score;//添加的一个成员变量
};

3、关于继承时,有关类兼容性的几点总结:

    3.1 子类对象可以当作父类对象使用。
    
    3.2 子类对象可以直接赋值给父类对象。
    
    3.3 子类对象可以直接初始化父类对象。
    
    3.4 父类指针可以直接指向子类对象。
    
    3.5 父类引用可以直接引用子类对象。

class Parent
{
public:
	void printP()
	{
		cout << "Parent::printP()..." << endl;
	}
	int a;
};

class Child :public Parent
{
public:
	void printC()
	{
		cout << "Child:: printC()...." << endl;
	}
	int b;
};

int main(void)
{
	Child c;//子类对象
	c.printP(); //子类对象可以当作父类对象使用

	Parent p = c; // 由于子类拥有全部父类的内存空间,子类能够保障父类初始化完整。
				  //子类对象可以直接初始化父类对象 因为子类内存空间包容的父类的,能够保证完全赋值。
	
	//Child c2 = p;//反过来赋值不行,因为子类中有的,父类中不一定有。

	
	//父类指针可以直接指向子类对象,因为父类中有的,子类中一定有。
	Parent *pp = &c;

	//不能用子类指针指向父类对象。
	//Child *cp = &p; // cp-> printP,  cp->printC
	//cp->b; //p中没有b的内存。 //此时访问b就越界了。

	//父类引用可以引用子类对象
	Parent &pr = c;

	//子类引用不可以引用父类的对象。
	//Child &cr = p;

	return 0;
}

4、继承的几点总结:

4.1 父类又叫做基类。子类又叫做派生类。

4.2 一般都是公有继承。

4.3 子类继承于父类, 父类中的成员变量 应该用 父类的构造函数来初始化

4.4静态成员变量在父类和子类中是共用的,在内存中只有一份。


5、多继承和虚继承:

//家具类
class Furniture
{
public:
	int m; //材质  
};
//如果子类虚继承本类, 编译器会将父类中的成员, 只拷贝一份。

//床类
class Bed: virtual  public Furniture
{
public:
	void sleep()
	{
		cout << "在床上睡觉" << endl;
	}
};

//沙发类
class Sofa :virtual public Furniture
{
public:
	void sit()
	{
		cout << "在沙发上睡觉" << endl;
	}
};

//沙发床
class SofaBed :public Bed, public Sofa
{
public:
	void sitAndSleep()
	{
		sit();//sofa
		sleep();//bed
	}
};

virtual的作用:如果没有这个关键字,因为sofa,bed类中都有m这个变量,所以当sofabed去继承的时候就会出错,因为不知道该继承哪个。加了virtual的意思是不管有几个m,sofabed类直接从furniture类中继承这个变量。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值