2018/2/8
C++
1.关于面向对象的简单见解
面向对象就是把一个大的问题渐渐抽象成一个个小的对象,通过对一个个对象属性和方法的定义,描述,实现而解决一个大的问题
2.关于多继承(multiple inheritance)
1.当对象中的关系比较复杂的时候使用多继承,比如说:A是基类,B和C是A的子类,但是D是B和C的综合,所以这个时候使用单继承的方法
不适用,因而采用多继承的方法
2.多继承语法
class A:public B,public C//说明A继承了B和C的方法,也说明了A是B和C的综合体*/
/*多继承
1.语法:class A:public B,public C//说明A继承了B和C的方法,也说明了A是B和C的综合体*/
#include<iostream>
using namespace std;
#include<stdlib.h>
#include<string>
/*创造基类*/
/*名字,睡觉,吃*/
class Animal
{
public:
string name;
void sleep();
void eat();
};
void Animal::sleep()
{
cout << "今天我睡了8个小时,真爽!!\n";
}
void Animal::eat()
{
cout << "我中午吃了红烧排骨\n";
}
/*子类之一:猪类*/
class pig :public Animal/*继承代码:class subclass:class superclass{。。。。。。};*/
{
public:
void climbing();//话说 猪会爬树嘛?
};
void pig::climbing()
{
cout << "母猪会上树\n" << endl;
}
class turtle :public Animal/*继承*/
{
public:
void swimming();
};
void turtle::swimming()
{
cout << "总有一天我会超越孙杨\n" << endl;
}
class stranger :public pig, public turtle
{
public:
void intronduce();
};
void stranger::intronduce()
{
cout << "实现多继承是指处理复杂的关系时,相当于不能用一个‘是’来解决的问题" << endl;
}
void main()
{
/*实例化对象*/
pig pig1;
turtle turtle1;
stranger stranger1;
cout << "***************************************************************" << endl;
cout << "猪类\n";
pig1.name = "八戒";
pig1.eat();
pig1.sleep();
pig1.climbing();
cout << "***************************************************************" << endl;
cout << "龟类\n";
turtle1.eat();
turtle1.sleep();
turtle1.swimming();
cout << "******************************************************************" << endl;
cout << "多继承类" << endl;
stranger1.climbing();
stranger1.swimming();
stranger1.intronduce();
cout << "*******************************************************************" << endl;
system("pause");
}
2.虚继承(以下概念转载)
虚继承是解决C++多重继承问题的一种手段,从不同途径继承来的同一基类,会在子类中存在多份拷贝。这将存在两个问题:其一,浪费存储空间;第二,存在二义性问题,通常可以将派生类对象的地址赋值给基类对象,实现的具体方式是,将基类指针指向继承类(继承类有基类的拷贝)中的基类对象的地址,但是多重继承可能存在一个基类的多份拷贝,这就出现了二义性;所以采用虚继承的方式;
实现代码
#include<iostream>
using namespace std;
#include<stdlib.h>
#include<string>
/*创造基类*/
/*名字,睡觉,吃*/
class Animal
{
public:
string name;
void sleep();
void eat();
void eyes();
};
void Animal::sleep()
{
cout << "今天我睡了8个小时,真爽!!\n";
}
void Animal::eat()
{
cout << "我中午吃了红烧排骨\n";
}
void Animal::eyes()
{
cout << "我有两只大眼睛" << endl;
}
/*子类之一:猪类*/
class pig :virtual public Animal/*继承代码:class subclass:class superclass{。。。。。。};*/
{
public:
void climbing();//话说 猪会爬树嘛?
};
void pig::climbing()
{
cout << "母猪会上树\n" << endl;
}
class turtle :virtual public Animal/*虚继承*/
{
public:
void swimming();
};
void turtle::swimming()
{
cout << "总有一天我会超越孙杨\n" << endl;
}
class stranger :public pig, public turtle
{
public:
void intronduce();
};
void stranger::intronduce()
{
cout << "实现多继承是指处理复杂的关系时,相当于不能用一个‘是’来解决的问题" << endl;
}
void main()
{
/*实例化对象*/
pig pig1;
turtle turtle1;
stranger stranger1;
cout << "***************************************************************" << endl;
cout << "猪类\n";
pig1.name = "八戒";
pig1.eat();
pig1.sleep();
pig1.climbing();
pig1.eyes();
cout << "***************************************************************" << endl;
cout << "龟类\n";
turtle1.eat();
turtle1.sleep();
turtle1.swimming();
turtle1.eyes();
cout << "******************************************************************" << endl;
cout << "多继承类" << endl;
stranger1.climbing();
stranger1.swimming();
stranger1.intronduce();
stranger1.eyes();//采用虚继承的方式,防止子类进行多次拷贝
cout << "*******************************************************************" << endl;
system("pause");
}