C++篇----开篇(2)

上一篇讲完之后...这一篇继续撸起来~~~~~~~~~~~~~~~~~

1.派生类的继承方式

单继承方式:


多继承方式:


2单继承方式的构造和析构函数顺序:

派生类构造函数的调用顺序如下:

(1)基类的构造函数

(2)派生类的构造函数

当撤销派生类对象时候,析构函数的调用刚好相反

注意:

无论是单继承方式还是多继承方式,派生类的构造函数必须调用基类的构造函数来初始化基类成员。

假设CStudent继承基类CPeople

CStudent::CStudent(char* name,char* no):CPeople(name)//通过这种方式调用基类,其中假设name是基类的私有成员


3.多继承方式

  比如小明既是老师也是学生
那么有class CXiao:public CTeacher,public CStudent{   }  //其中CTeacher和CStudent是两个基类


4虚函数

CPeople* pe;  //其中CPeople是基类,且其成员函数display()是一个虚函数
pe=&st1;
pe->display();   //此时显示的是派生类str1中重写的display,而不是基类的display

pe=&st2;
pe->display(); //此时显示的是派生类str2中重写的display,而不是基类的display

1.一旦基类的某个函数被声明成虚函数,则在所有的派生类中它都是虚函数。
2.修饰基类中的成员函数要想成为虚函数,它必须是public或者是protected的。
3.派生类中重写的虚函数应该与基类的虚函数完全一样,包括虚函数的返回值类型。

5 友元

通常,类的私有和保护数据成员只能在类中由该类的成员函数访问,类的对象及外部函数只能访问该类的公有成员函数,而友元就厉害了!都可以访问~~~~~~~

我们在类中用friend关键字声明一个函数,且该函数的形参中含有该类的对象形参,这个函数便可通过形参对象来访问该类的任何私有和保护成员,即友元关系

情况一:友元外部函数
class CPerson{
   friend void change(CPerson &pt)//友元外部函数
   private:
          char  name[10];
   protected:
           int   age;
    public:
            void  display();
}

情况二:友元成员函数


贴出例子,创建Dog.h,Dog.cpp, Person.h, Person.cpp 以及主函数friendTest.cpp

/*************************Dog.h***************************************************/
#pragma once
#include "Person.h"
class CDog
{
friend void CPerson::changeDogName(CDog& d);//将CPerson::changeDogName()设置为友元函数,这种情况属于情况二
public:
CDog(char* name);
~CDog();
private:
char name[10];
public:
void display();
};

/*************************Dog.cpp***************************************************/
#include "Dog.h"
#include <iostream>
using namespace std;


CDog::CDog(char* name)
{
strcpy(this->name,name);
}
CDog::~CDog()
{
}
void CDog::display()
{
cout << "name: " << name << endl;
}

/*********************Person.h*****************************************************/
#pragma once
class CDog;
class CPerson
{
friend void change(CPerson& p);  //将change设置为友元函数,这种情况属于情况一


public:
CPerson(char* name);
~CPerson();
private:
char name[10];
public:
void display();
void changeDogName(CDog& d);
};

/************************************Person.cpp******************************/
#include "Person.h"
#include <iostream>
#include "Dog.h"
using namespace std;

CPerson::CPerson(char* name)
{
strcpy(this->name,name);
}
CPerson::~CPerson()
{
}
void CPerson::display()
{
cout << "name: " << name << endl;
}
void change(CPerson& p)
{
strcpy(p.name, "lisi");
}
void CPerson::changeDogName(CDog& d)
{
strcpy(d.name, "mybaby");
}



/***************************friendTest.cpp***************************************/
#include "Person.h"
#include  <iostream>
#include "Dog.h"
using namespace std;
int main()
{
CPerson per("zhang");
CDog dog("mydog");

change(per);
per.changeDogName(dog);

dog.display();
per.display();
system("pause");
return 0;
}

6.静态成员

 如何实现数据共享? 设置全局变量和全局对象
 但是面临的问题是,这样严重破坏类的封装性,以及导致程序混乱,一旦程序变大,维护量极具上升。
 因此静态成员应运而生.....................
/******************************Sum.h*******************************************/
#pragma once
class CSum
{
  public:
         CSum(void);
         ~CSum(void);
  private:
          static int total;
  public:
          void   clickme();
          void   display();
};

/**************************Sum.cpp***********************************/
#include "Sum.h"
#include <iostream>
using namespace std;
CSum::CSum(void)
{
}
CSum::~CSum(void)
{
}
void CSum::click()
{
  total++;
}
void CSum::display()
{
  cout<<"total: "<<total<<endl;
}
int CSum::total =10;

/**********************staticTest.cpp*******************************/
#include <iostream>
#include "Sum.h"
using namespace std;
int main()
{
  CSum sum1;
  CSum sum2;
  
  sum1.clickme();
  sum2.clickme();
  sum1.clickme();
  
   sum1.display();                  // 输出   total=13
  system("pause");
  return 0;
}


静态成员函数

静态成员函数和静态数据成员,都不专属于某个对象,而是所有对象所公有的成员
静态成员函数不能直接引用类中非静态成员,只能引用静态数据成员。

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值