C++面向对象:
在这里推荐大家一个C++的网站:http://www.cplusplus.com/reference/
//继承--子类继承父类(儿子继承爸爸),儿子有了爸爸的特性和财产,提高了代码的重用性.
class A
{
public:
void Func1(void);
void Func2(void);
};
class B : public A
{
public:
void Func3(void);
void Func4(void);
};
// Example
int main()
{
B b; // B的一个对象
b.Func1(); // B 从A 继承了函数Func1
b.Func2(); // B 从A 继承了函数Func2
b.Func3();
b.Func4();
return 0;
}
//继承 解决代码的重用性
class Human{
//一般函数在前面
public :
//继承中 构造函数 需要和
Human(char* name, int age){
this->age = age;
this->name = name;
}
void say(){
cout << "say" << endl;
}
private:
char* name;
int age;
};
//继承的写法,修饰符:按照最小的范围限制子类
//继承的二义性(即指向不明确): 使用virtual 来区别
class Man :public Human{
public:
Man(char* brother, char* name, int age) :Human(name, age){
this->brother = brother;
}
//
void chasing(){
cout << "泡妞" << endl;
}
private:
char* brother;
};
void work(Human& h){
h.say();
}
//构造函数:先父类,再子类
//析构函数: 先子类,再父类
void main(){
Man m1("ss","sssss",22);
m1.say();
//调用可用指针 和引用 直接赋值
//Human h1 = m1;
//h1.say();
system("pause");
}
//学生,既是人,又是公民
class Student : public Person, public Citizen{
};
*/
一句话:谁最低听谁的
基类中 | 继承方式 => | 子类中 |
---|---|---|
public | public | public |
public | protected | protected |
public | private | private |
protected | public | protected |
protected | protected | protected |
protected | private | private |
private | public | private |
private | protected | private |
private | private | private |
//虚继承,不同路径继承来的同名成员只有一份拷贝,解决不明确的问题
/* class A{ public: char* name; }; class A1 : virtual public A{ }; class A2 : virtual public A{ }; class B : public A1, public A2{ }; void main(){ B b; b.name = "jason"; //指定父类显示调用 //b.A1::name = "jason"; //b.A2::name = "jason"; system("pause"); }
虚函数
多态(程序的扩展性)
动态多态:程序运行过程中,觉得哪一个函数被调用(重写)
静态多态:重载
//发生动态的条件:
1.继承
2.父类的引用或者指针指向子类的对象
3.函数的重写
#include "plane.h"
#include "p1.h"
#include "p2.h"
//业务函数
void bizPlay(plane& p){
p.fly();
p.land();
}
void main(){
Plane p1;
bizPlay(p1);
//直升飞机
p2 p22;
bizPlay(p22);
p1 p11;
bizPlay(p11);
system("pause");
}
类似于java
//1.当一个类具有一个纯虚函数,这个类就是抽象类
//2.抽象类不能实例化对象
//3.子类继承抽象类,必须要实现纯虚函数,如果没有,子类也是抽象类
//抽象类的作用:为了继承约束,根本不知道未来的实现
class Drawble{
virtual void draw();
};
template<typename T>
void myswap(T& a, T& b){
T tmp = 0;
tmp = a;
a = b;
b = tmp;
}
void main(){
//根据实际类型,自动推导
int a = 10, b = 20;
myswap<int>(a,b);
cout << a << "," << b << endl;
char x = 'v', y = 'w';
myswap(x, y);
cout << x << "," << y << endl;
system("pause");
}
template<class T>
class A{
public :
A(T a){
this->a = a;
}
protected:
T a;
};
class B :public A < int > {
public :
B(int a,int b) :A(a){
}
private:
int b;
};
//模板类继承模板类
template<class T>
class C :public A <T> {
public :
C(T c,T a) :A<T>(a){
this->c = c;
}
protected:
T c;
};
void main(){
//实例化
C<int> c(6,3);
system("pause");
}
//类似于java ,throw是抛出,catch是捕捉,
并且分为自定义异常类,继承异常类,实用常用异常类等.
在C++中有 类似于java中的异常类,详细的点这里,常用的如下
logic_error--Logic error exception (class )
domain_errorDomain --error exception (class )
invalid_argumentInvalid-- argument exception (class )
length_errorLength --error exception (class )
void main(){
try{
int age = 300;
if (age > 200){
//throw myException(); //throw抛出 (最好不要抛出指针产生对象)
//throw length_error("超出范围");
throw NullPointException("为空");
}
}
catch(NullPointException p){
cout << p.what<<endl;
}
//catch (char * error){
// cout << error << endl;
//}
//catch (myException e){
//
//}
//catch (...){//未知异常
//
//};
//;
system("pause");
}