C++语法学习笔记十四:派生类-调用顺序-访问等级-函数遮蔽

实例代码:


#include 
#include 
#include 

using namespace std;

//基类

//类定义/ 类声明
class Human{
public:
	Human(){
		std::cout << " 执行了Human::Human() " << std::endl;
	}
	Human(int abc){
		std::cout << " 执行了Human::Human(int) " << std::endl;
	}
	void funcpub(){
		std::cout << " 执行了Human::funcpub() " << std::endl;
	}

	void somenamefunc(){
		std::cout << " 执行了Human::somenamefunc() " << std::endl;
	}

public:
	int m_age; //年龄
	char m_name[100]; //名字

}; // 类定义/ 类声明时 大家千万不要忘记末尾的;


//子类

//男人
class Men : public Human{  //表示Men 是Human的子类
public:
	Men(){
		std::cout << " 执行了Men::Men() " << std::endl;
	}
	Men(int abc){
		std::cout << " 执行了Men::Men(int) " << std::endl;
	}
	void somenamefunc(){

		Human::somenamefunc(); //调用父类somenamefunc函数
		std::cout << " 执行了Men::somenamefunc() " << std::endl;
	}

public:
	using Human::somenamefunc;

}; // 类定义/ 类声明时 大家千万不要忘记末尾的;





int main() {
	//一: 派生类概念
	//类之间有一种层次关系,有父亲类,有孩子类。
	//车这个类,当成父类(也叫基类,超类),派生出卡车、轿车,他们属于孩子类(子类/派生类)
	//继承:有父亲类,有孩子类,构成了层次关系。继承 这种概念,是咱们面向对象程序设计的核心思想之一。
	//这种继承,说白了就是,我们要先定义一个父类。父类中定义一些公用的成员变量,成员函数。
	//我们通过继承父类来构建新的类:子类,所以,写代码时,我们只需要写和子类相关的一些内容即可。
	//子类一般会比父类更加庞大

	//class Men : public Human{  //表示Men 是Human的子类
	//class 子类名: 继承方式 父类名
	//继承方式(访问等级/访问权限): public /protected/private:
	
	//二: 派生类对象定义时调用构造函数的顺序
	Men men0; // 当定义子类对象时,是要调用父类和子类的构造函数的,而且,父类的构造函数的函数体先执行,
			//子类的构造函数的函数体后执行。


	//三:public 、 protected 、 private

	
	//四:函数遮蔽
	Men men; 
	men.funcpub();   //子类调用父类的函数
	//也就是说,子类中如果有一个同名函数,那么父类中,不管有几个同名函数,子类中都无法访问到。
	//如果我们确实是想调用父类中的同名函数,怎么办?
	//(1) 在子类的成员函数中,用“父类::函数名” 强制嗲用父类函数。
	men.somenamefunc();

	//(2) using : using namespace
	//C++ 11 :让父类同名函数在子类中可见。
	//通过using 这个关键字,让父类的同名函数在子类中可见,说白了就是“让父类同名函数在子类中以重载的方式来使用”;

	//说明:
	//a) using Human::somenamefunc; 只能指定函数名,则凡是基类中的public的somenamefunc,在子类中都可见,你无法让
		//一部分父类中的同名函数可见。
	//b) using 引入的主要目的是用来实现在子类对象中调用父类的重载版本。该函数在父类中的参数跟子类中的参数,类型/个数,总有一个不用。


	system("pause");
	return 0;
}

你可能感兴趣的:(#,3.2,C++)