栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ 09 翁恺> 继承

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ 09 翁恺> 继承

 

说明:学生类是人类的扩充,学生类里有普通人类里没有的属性 ,加了点属于学生自有的东西。

当你继承一个父类的时候,父类里所有的东西都有了。

 

  例一:继承时构造函数调用情况                                                                                                     

#include

using namespace std;

class A {
public:
	A() :i(0) { cout << "A::A()" << endl; }
	~A() { cout << "A::~A()" << endl; }
	void print() { cout << "A::f()" << endl; }
	void set(int ii) { i = ii; }
private:
	int i;
};

class B :public A {

};

int main()
{
	B b;
	b.set(10);
	b.print();

	return 0;
}

 输出:                                                                                                                                              

  例二:调用父类public函数                                                                                                              

#include

using namespace std;

class A {
public:
	A() :i(0) { cout << "A::A()" << endl; }
	~A() { cout << "A::~A()" << endl; }
	void print() { cout << "A::f()" << i << endl; }
	void set(int ii) { i = ii; }
private:
	int i;
};

class B :public A {
public:
	void f() { set(20); print(); }  //调用父类public函数
};

int main()
{
	B b;
	b.set(10);
	b.print();
	b.f();

	return 0;
}

 输出:                                                                                                                                               

  例三:析构函数输出顺序                                                                                                                 

#include

using namespace std;

class A {
public:
	A(int ii) :i(0) { cout << "A::A(int ii)" << endl; } //要求有显示的不带参数的构造函数初始化 i
	~A() { cout << "A::~A()" << endl; }
	void print() { cout << "A::f()" << i << endl; }
	void set(int ii) { i = ii; }
protected:
	void use() { cout << "A::use()" << i + 1 << endl; }
private:
	int i;
};

class B :public A {
public:
	B():A(15){ cout << "B::A()" << endl; };
	~B() { cout << "B::~B()" << endl; }
	void f() {
		set(20);
		// i = 30; //父类的private子类不能用
		print(); 
		use();
	}
};

int main()
{
	B b;
	b.set(10);
	b.print();
	b.f();
	//b.use(); //父类中的protected,对象不能用
	return 0;
}

 输出:                                                                                                                                               

 

  例四:隐藏同名函数                                                                                                                       

#include

using namespace std;

class A {
public:
	A(int ii) :i(0) { cout << "A::A(int ii)" << endl; } //要求有显示的不带参数的构造函数初始化 i
	~A() { cout << "A::~A()" << endl; }
	void print() { cout << "A::print()" << i << endl; }
	void print(int i) { cout << "A:print(int i):i:" << i; print(); }
	void set(int ii) { i = ii; }
protected:
	void use() { cout << "A::use()" << i + 1 << endl; }
private:
	int i;
};

class B :public A {
public:
	B():A(15){ cout << "B::A()" << endl; };
	~B() { cout << "B::~B()" << endl; }
	void print() { cout << "B::print()" << endl; }
	void f() {
		set(20);
		// i = 30; //父类的private子类不能用
		print(); 
		use();
	}
};

int main()
{
	B b;
	b.set(10);
	b.print();
	b.f();
	//b.use(); //父类中的protected,对象不能用
	//b.print(200);//B中的print()隐藏了A中print()和print(int),也就是隐藏了所有同名的函数,不管参数是什么都隐藏
	b.A::print(100);
	return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/429311.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号