C++第四课:类的使用(二)[个人见解]
作者:互联网
前面说到C++类的名字自定义要有含义,成员函数名也同样如此。
一个好的程序员除了让自己能看懂代码外,那是能力,也能让别人看懂,那是本事。
我们来看第一个特性:继承!
什么是继承?
小编不说概念性的定义,先举两个例子:
1、你的身体流淌着的是父母的血统。
2、你能学到老师的知识。
能看出什么来?自己体会。
那么在C++中如何继承呢?
我们再创建一个类Teacher.h和Teacher.cpp两个文件。
Teacher.h:
#ifndef __Teacher_h__ #define __Teacher_h__ class Teachar { public: Teachar(); ~Teachar(); public: //公有的属性或成员 int get_KnowLedge()const; //获取知识 char *get_Name()const; //获取名字 int get_Age()const; //获取年龄 void print_information(); //打印所有的信息 int t_knowledeg; //知识 int t_age; //年龄 char *t_name; //名字 protected: //受保护的属性或成员 private: //私有属性或成员 };
Teacher.cpp#include "Teacher.h"#include <iostream>
using namespace std; //构造函数 Teachar::Teachar() { this->t_name = "visiousdragon"; this->t_age = 29; this->t_knowledeg = 100; } Teachar::~Teachar() { } //获取知识 int Teachar::get_KnowLedge() const { return this->t_knowledeg; } //获取名字 char * Teachar::get_Name() const { return this->t_name; } //获取年龄 int Teachar::get_Age() const { return this->t_age; } //获取信息 void Teachar::print_information() {
cout << this->get_Name() << "\t" << this->get_Age() << "\t" << this->get_KnowLedge() << endl; }
创建好了后,我们来继承Teacher类.
打开前面创建的Student.h头文件:
#ifndef __STUDENT_H__ //if not define 的简写,防止你创建的头文件是否被宏重复定义 #define __STUDENT_H__ #include "Teacher.h" //自定义Student类 class Student :public Teachar /*,public Teacher2*/ //这就是继承Teacher的写法,当然也能多继承其他的类,只需要逗号隔开即可。注意:当开发时最好别继承太多的父类,以后你会懂。 { public: Student(); //构造函数 ~Student(); //析构函数 public: //公有的属性或成员 protected: //受保护的属性或成员 private: //私有属性或成员 }; #endif // ! __STUDENT_H__
既然一切就绪,那我们来看看继承如何实现的。我们Student类内部可是什么都没有写的。
打开主体源文件:
#include <iostream> #include "Teacher.h" #include "Student.h" using namespace std; int main() { Student student1; //子类(派生类)继承了Teacher的成员函数,实例化也称创建一个类对象 student1.print_information(); Student *student2 = new Student; //子类(派生类)继承了Teacher的成员函数,实例化也称生成一个类指针对象 student2->print_information(); Teachar *teahcer=&student1; //子类对象引用给父类指针对象,相当于前面学得指针赋值int *p=&number; teahcer->print_information(); system("pause"); return 0; }
打印得结果是相同得,那我们就有一个疑惑,什么是继承?通俗得讲:继承(Inheritance)可以理解为一个类从另一个类获取成员变量和成员函数的过程。
有人会问了,子类难道什么都不做吗,只管调用?那怎么可能呢!
子类(派生类)继承了父类(基类),除了继承了父类得成员变量和成员函数外,也可以有自己的成员变量和成员函数。
我们再来看看全新得Student.h头文件内部:
#ifndef __STUDENT_H__ //if not define 的简写,防止你创建的头文件是否被宏重复定义 #define __STUDENT_H__ #include "Teacher.h" //自定义Student类 class Student :public Teachar { public: Student(); //构造函数 ~Student(); //析构函数 public: //公有的属性或成员 void getTeacherInformation(); char *getTeacherName()const; int getTeacherAge()const; int getTeacherKnowledge()const; protected: //受保护的属性或成员 private: //私有属性或成员 Teachar *teacher; //将父类指针对象作为Student类的成员变量 }; #endif // ! __STUDENT_H__
再看看全新Studnet.cpp文件内部:
#include "Student.h" #include <iostream> using namespace std; Student::Student() { teacher = new Teachar; }
//析构函数 Student ::~Student() {
//在建立对象时用new开辟了一片内存空间,delete会自动调用析构函数后释放内存
if(teacher != NULL)
{
delete teacher;
}
} ////获取知识 void Student::getTeacherInformation() { cout << this->getTeacherName() << "\t" << this->getTeacherAge() << "\t" << this->getTeacherKnowledge() << endl; } char *Student::getTeacherName()const { return teacher->get_Name(); } int Student::getTeacherAge()const { return teacher->get_Age(); } int Student::getTeacherKnowledge()const { return teacher->get_KnowLedge(); }
主体源文件:
#include <iostream> #include "Student.h" using namespace std; int main() { Student student1; //子类(派生类)继承了Teacher的成员函数 student1.getTeacherInformation(); system("pause"); return 0; }
运行看看,还是可以得到Teacher类内部的数据,不过调用的函数却是Student内部的函数,这就能肯定一点,Student类作为子类时,它可以继承父类的成员变量、函数,也可以拥有自己的成员变量、函数。
有人会奇怪,为什么要在Student构造函数内部实例化Teacher的对象,因为它作为一个Student的成员变量,不实例化(初始化)这个对象,下面的三个函数就无法使用:
... char *Student::getTeacherName()const { return teacher->get_Name(); } int Student::getTeacherAge()const { return teacher->get_Age(); } int Student::getTeacherKnowledge()const { return teacher->get_KnowLedge(); } ...
不信的可以试试,肯定为空,报出异常。
也有人会奇怪,有的地方为什么写this->调用函数,这句this->代表就是当前所在的类指针对象,什么意思?
说白了,它比结构体更简练,每个类都有一个看不见的指针对象,就是它本身,在Student内部使用就代表Student 的指针对象。
当然说到这里不得不提一点,子类继承父类时,执行子类成员函数、构造函数、析构函数,或父类的成员函数、构造函数、析构函数,它都有优先级的。
这里不多说了,可以上网搜搜,也可以在每个函数内部加句代码调试看看。
记住:不是每个人都能把知识讲的非常全面,中间有时也要养成自己动手的能力,多听,多看,多敲,多多总结,努力吧!
标签:第四课,个人见解,Student,Teachar,int,get,C++,__,Teacher 来源: https://www.cnblogs.com/VisiousDragon/p/10602908.html