首页 > 代码库 > 网易云课堂_C++程序设计入门(上)_第6单元:丹枫虽老犹多态–继承与多态

网易云课堂_C++程序设计入门(上)_第6单元:丹枫虽老犹多态–继承与多态

 

第01节:继承

 

回顾

面向对象的4个特点:

A(抽象) P(多态)I(继承)E(封装)

前两个单元:AE

本单元: PI

 

第02节:构造函数和析构函数

 

派生类继承的成员

派生类继承 ctor 和 dtor 吗?

派生类不继承的特殊函数

构造函数 (C++11已允许继承)

析构函数

作为特权地位的友元函数

赋值运算符函数

 

#include <iostream>struct A{	A(int i)	{	}	A(double d, int i)	{	}	// ...};struct B : A{	using A::A; // 继承基类构造函数	int d{ 0 }; // 新的变量初始化方法};int main(){	B b(1); // b.d 初始化为 0}

 

Calling Base Class Constructors ( 调用基类构造函数)

Ctors of base class can only be invoked from the constructors of the derived classes. ( 基类构造函数只能由派生类构造函数调用)

The syntax to invoke it is as follows:

 

DerivedClass(parameterList) : BaseClass(){	// Perform initialization}// OrDerivedClass(parameterList) : BaseClass(argumentList){	// Perform initialization}

 

No-Arg Constructor in Base Class( 基类的无参构造函数)

Rules for invoke constructors in derived class

A constructor in a derived class must always invoke a constructor in its base class. (派 生类构造函数必须调用基类构造函数)

 

If a base constructor is not invoked explicitly, the base class’s no-arg constructor is invoked by default. ( 若基类ctor未被显式调用,基类的无参构造函数就会被调用)

 

Constructor and Destructor Chaining ( 构造和析构函数链)

constructor chaining (构造函数链)

Constructing an instance of a class invokes all the base class along the inheritance chain. ( 构造类实例会沿着 继承链调用所有的基类ctor)

Invoke sequence: base first, derive next

 

destructor chaining (析构函数链)

Conversely, the destructors are automatically invoked in reverse order(dtor 与ctor正好相反)

Invoke sequence: derive first, base next

 

no-arg constructor ( 无参构造函数)

If a class is designed to be extended, provide a no-arg constructor. (若你的类 想被别人扩展,那么就提供一个无参构造函数)

 

34. 文件扩展名:头文件用.h,源文件用 .cpp (c++, cc也可)

 

35. A class should be declared in a header file and defined in a source file where the name of the files match the name of the class.

35. 类应该在头文件中声明并在源文件中定义,俩文件名字应 该与类名相同

例如:MyClass.h, MyClass.c++

例外的是,模板类的声明和定义都要放在头文件中

 

49. Class variables should never be declared public.

49. 类成员变量不可被声明为public

说明:公有变量违背了C++的信息隐藏原则。例外的是, 如果class只是一个数据结构,类似C语言中的struct,则 可将类变量声明为公有

 

#include <iostream>class Fruit{public:	Fruit()	{	}	Fruit(int id)	{	}	std::string s;};class Apple : public Fruit{public:	Apple() :Fruit()	{	}};int main(){	Apple apple;}

 

第03节:函数重定义

第04节:多态和虚函数

第05节:访问控制 (可见性控制)

第06节:抽象类与纯虚函数

第07节:动态类型转换

第6单元作业【2】- 在线编程(难度:中)提交截止时间:2016年10月7日 23:30 / 待定提交阶段

第6单元作业【1】-在线编程(难度:易)提交截止时间:2016年10月7日 23:30 / 待定提交阶段

网易云课堂_C++程序设计入门(上)_第6单元:丹枫虽老犹多态–继承与多态