CPP 类与对象# 继承

#include<iostream>
#include<cstring>
using namespace std;
class Student {
//private:
protected:
	string name;//32 bits
	int num;//4 bits
	int age;//4 bits
public:
	Student(string, int, int);
	void print() { cout << name << " " << num << " " << age << endl; }
	void print1() { cout << name << " " << num << " " << age << endl; }
	void brint() { cout << "Student brint" << endl; }
	~Student() { cout << "Destruct Student" << endl; }
};
class IOTStudent :public Student {
private:
	int cpp;//4 bits
public:
	void print() { cout << name <<" " <<" "<< num <<" " << age<<" "<<cpp<<endl; }//若Student类的name num age是protected则可以访问,若为private则无法访问
	void print2() { cout << name << " " << " " << num << " " << age << " " << cpp << endl; }
	void brint() { cout << "IOTStudent brint" << endl; }
	IOTStudent(string, int, int,int);
	~IOTStudent() { cout << "Destruct ToStudent" << endl; }
};
Student::Student(string name1, int num1, int age1) :name(name1), num(num1) {
	age = age1;
	cout << "construct Student" << endl;
}
IOTStudent::IOTStudent(string name1, int num1, int age1,int cpp1) :Student(name1,num1,age1) //子类的构造函数必须给父类提供参数初始化
{
	cpp = cpp1;
	cout << "construct ToStudent" << endl;
}
void f(Student* p) {
	p->brint();
}
void h(IOTStudent* p) {
	p->brint();
}
int main() {
	Student s1("zhang", 203002, 19),*p1;
	IOTStudent s2("li", 2023001, 20,26),*p2;
	//调用子类的构造函数时,会先自动调用父类的构造函数再调用子类的构造函数
	//所有子类的析构函数被调用时会自动调用父类的析构函数
	cout << "size of Student is: " << sizeof(Student) << endl;// 48 ,Student对齐方式 8bits +32+4+4
	cout << "size of ToStudent is: " << sizeof(IOTStudent) << endl;// 56 IOTStudent对齐方式 8bits +32+4+4+4
	//cout << s2.name; error 不可访问
	s2.print(); //子类的print()
	s2.print1();
	s2.Student::print();
	//函数名相同时,用这种方式来调用父类函数
	//:: 表示预操作
	s1 = s2;//将s2的信息复制到s1(无使用价值)
	// s2 = s1;  error 找不到cpp的空间,cpp会变成随机数
	p1 = &s1;
	p2 = &s2;
	p1 = &s2;//父类指针指向子类
	// p2 = &s1; error  找不到cpp的空间,cpp会变成随机数
	p1->brint();// "Student brint"
	p1 = p2;// p1=&s2;
	//p2 = p1  error  找不到cpp的空间,cpp会变成随机数
	p1->brint();// "Student brint\n"  p1是Student类型!! 静态编译
    p2->brint();//"IOTStuden brint\n" p2是IOTStudent类型!!
	f(&s1);// "Student brint\n" 
	f(&s2);// "Student brint\n" 传入后类型发生转化 
	//静态联编的情况下 判断标准是函数的参数类型
	//h(&s1);  error
	h(&s2);
	return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值