c++继承和多态

本文详细介绍了C++中的继承概念,包括派生类的生成过程、成员访问、静态成员、构造函数与析构函数的规则。同时,讨论了多态性,特别是虚函数的使用,以及静态和动态联编的区别。还提到了纯虚函数和抽象类的应用。通过这段时间的学习,作者认识到巩固知识的重要性,并结合实际习题分析了如何利用继承原则提高代码复用性。
摘要由CSDN通过智能技术生成
                                                                                  **继承和多态**                                                  

一.知识点:

一.继承
1.基本概念:
在这里插入图片描述
2.使用基本语法:在这里插入图片描述在这里插入图片描述在这里插入图片描述
注意:在这里插入图片描述
3.派生类生成过程:
派生类的生成过程经历了三个步骤:
1)吸收基类成员(全部吸收(构造、析构除外),但不一定可见)
在这里插入图片描述
2)改造基类成员
在这里插入图片描述
3)添加派生类新成员
在这里插入图片描述
例子:
定义一个基类person(不定义构造函数)
姓名、性别、年龄(访问权限设置为私有)
定义公有的成员函数set_p()
定义公有的成员函数display_p(),显示person的信息
再由基类派生出学生类(不定义构造函数,采用公有继承的方式)
增加学号、班级、专业和入学成绩
定义公有成员函数set_t()
定义成员函定义公有的成员函数display_s(),显示所有的信息

#include<iostream>
#include <string>
using namespace std;
class Person
{
   	string name;
	int age;
	string sex;
public:
	void set()	{
   
		cout<<"name\tage\tsex"<<endl;
		cin>>name>>age>>sex;
	}
	void show()	{
   
 		cout<<name<<"  "<<age<<"  "<<sex<<endl;
	}
};
class student :public Person
{
   
	string no;
	string zhuanye;
	string t_class;
	float score;
public:
	void set(){
       //隐藏了基类中的同名成员       
 Person::set(); //调用继承于基类的成员函数访问继承于基类的数据成员
 cout<<"zhuanye\tt_class\tscore"<<endl;
 cin>>zhuanye>>t_class>>score;
	}
	void show()	{
   
		Person::show();
		cout<<zhuanye<<"  "<<t_class<<"  "<<score<<endl;}};

4.重名成员
派生类定义了与基类同名的成员,在派生类中访问同名成员时屏蔽(hide)了基类的同名成员
在派生类中使用基类的同名成员,显式地使用类名限定符:
类名 :: 成员

#include<iostream>
using namespace std ;
class A
{
    public:	  
       int a1, a2 ;
      A( int i1=0, int i2=0 )
       {
    a1 = i1; a2 = i2; }
      void print() 
         {
    cout << "a1=" << a1 << '\t' << "a2=" << a2 << endl ; }
};
class B : public A
{
    public:	
       int b1, b2 ;
       B( int j1=1, int j2=1 )
        {
    b1 = j1; b2 = j2; }
       void print()		//定义同名函数
         {
    cout << "b1=" << b1 << '\t' << "b2=" << b2 << endl ; }
 void printAB()
        {
    A::print() ;		//派生类对象调用基类版本同名成员函数
           print() ;		//派生类对象调用自身的成员函数
       }
};
int main()
{
    B  b ;  
 b.A::print();
 b.printAB();  }

5.
.在这里插入图片描述
基类定义的静态成员,将被所有派生类共享(基类和派生类共享基类中的静态成员)
根据静态成员自身的访问特性和派生类的继承方式,在类层次体系中具有不同的访问性质
派生类中访问静态成员,用以下形式显式说明:
类名 :: 成员或通过对象访问 对象名 . 成员

#include<iostream>
using namespace std ;
class B
{
    public:
    static void Add() {
    i++ ; }
    static int i;
    void out() {
    cout<<"static i="<<i<<endl; }
};
int B::i=0;
class D : private B
{
    public:    
      void f() 
       {
    i=5;
         Add();
         B::i++;
         B::Add();      }};
int main()
{
    B x;  
  D y;
  x.Add();
  x.out();
  y.f();
  cout<<"static i="<<B::i<<endl;
  cout<<"static i="<<x.i<<endl;
  //cout<<"static i="<<y.i<<endl;
}

6.基类的初始化
在创建派生类对象时用指定参数调用基类的构造函数来初始化派生类继承基类的数据
派生类构造函数声明为
派生类构造函数 ( 变元表 ) : 基类 ( 变元表 ) , 对象成员1( 变元表 )… 对象成员n ( 变元表 ) ;
构造函数执行顺序:基类 ->对象成员->派生类
私有继承的例子,一般不使用:

#include<iostream>
using namespace std ;
class  parent_class
{
        int  data1 , data2 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值