继承与派生

学习c++的第八天

学习内容:

  1. 理解继承的含义,能够定义和使用类的继承关系;
  2. 掌握派生类的声明与实现方法;
  3. 掌握类的构造函数的初始化列表与作用域分辨符的使用方法;
  4. 理解虚基类在类的继承层次中的作用;

遇到的问题:

继承和派生的相同与不同点。

解决的办法:

经浏览CSDN里的大神们写的关于继承、派生的文章后,弄懂了它们的区别。

心得体会:

类B继承类A:

  • 基类A的private成员a不可直接访问,派生类B只能通过基类中的public函数去访问这个私有成员。

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

class A {
private:
	int a = 6;
public:
	void AccessPrivateDataMember() {
		cout << a << endl;
	}
};
class B : public A {}; //B继承A里边的除构造、析构函数外的所有public、protected修饰的成员。虽然不能继承private修饰的成员,但B可通过继承A的public修饰的函数成员,来访问private修饰的成员。

int main() {
	B b;
	b.AccessPrivateDataMember(); //B的对象b访问A的private修饰的数据成员a;
	system("pause");
	return 0;
}

protected修饰符:

  • 横向来看,和private一样,不能在类外被访问。即类A和类B同辈分,而且毫无瓜葛。
  • 纵向来看,在类A的子嗣中,对于其派生类来说,protected和public成员的性质是相同的。类A 是类B的爹,类B的成员可访问类A中protected修饰的成员。

派生类的构成:

  • 继承基类的成员。默认情况下,子类包含父类中除了构造函数、private修饰的成员之外的所有成员。
  • 可覆盖(重载)父类的成员。
  • 可添加新的成员。

继承与派生是同一个过程从不同的角度看:

  • 继承的目的: 实现设计与代码的重用,充分利用原有的类
  • 派生的目的: 当新的问题出现,原有程序无法解决,需要对原有程序进行改造。

单继承时子类的定义:

class A{};
class B : public A{};  //class 派生类名:继承方式 基类名{};

多继承时子类的定义:

class A1{};
class A2{};
class A3{};
class B : private A1,public A2,protected A3{};
  //class 派生类名:继承方式1 基类名1, 继承方式2 基类名2,......  {};
  • 继承方式
    在这里插入图片描述

学习内容4的代码

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

class Mammal {
public:

	Mammal() {
		cout << "Mammal类构造函数被调用!" << endl;
}
	~Mammal() {
		cout << "Mammal类析构函数被调用!" << endl;
	}
};

class Dog : public Mammal {


private:
	string color;

public:

	Dog() {
		cout << "Dog类构造函数被调用!" << endl;
	}

	~Dog() {
		cout << "Dog类析构函数被调用!" << endl;
	}
	void Getcolor() {
		cout << "请设置小狗的毛发颜色:";
		cin >> color;
	}
	void Setcolor() {

		cout << "小狗的毛发颜色被成功设置,为:" << color  << endl;
	}
	

};

int main() {
	
	Dog dog;
	dog.Getcolor();
	dog.Setcolor();
	system("pause");
	return 0;
}


构造和析构的顺序是相反的。构造时,基类先构造,然后再派生类。析构时则反过来。先调用派生类的析构,再调用基类的析构。这符合资源栈的操作。先进后出,先申请的资源后释放。

本文有部分引用,来自:继承与派生

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值