C++与C语言类似,运算效率高,与java也有相似之处
一:基础
1.输入:C语言中使用scanf来输入,需要声明变量的类型,头文件include<stdio.h>。
C++中只需要“cin>>变量”即可实现,头文件include<iostream>。
2.输出:C语言输出用printf执行,也需要声明变量的类型。
C++用“cout<<变量”即可完成。
二:类与继承
类在Java中广泛应用,C++中也可以用到类,但在定义方式上和Java不同,C++类中也可以由构造函数。
例如,现在定义一个Animal类,有构造方法和一个void型eat方法和breathe方法
#include <iostream>
using namespace std;
class Animal
{
public : //方法为公共类型,还可以是protected或private型
Animal() //构造方法
{
cout<<"Hello Animal"<<endl;
}
void eat() //void型eat方法
{
cout<<"Animal eat"<<endl;
}
void breathe()
{
cout<<"Animal breathe"<<endl;
}
};
这样一个类就定义完成了。现在要求定义一个子类Fish,FishheAnimal呼吸方式不同,要求在Fish类中将breathe方法改为“Fish bubble”且要有子类的构造方法
class Fish:public Animal //java用extends表示继承,C++用":public 父类"继承
{
public:
Fish() //Fish 构造方法
{
cout<<"Hello Fish"<<endl;
}
void breathe()
{
cout<<"Fish bubble"<<endl; //Fish对breathe方法进行覆盖
}
};
此时如果定义Fish的一个对象 fh,则fh.breathe()输出将会是——Fish bubble
假如现在想让Fish的breathe方法既能输出父类的breathe方法又能输出自己的breathe方法该怎么办?
这涉及了继承关系中的方法重写,实现代码如下:
void breathe()
{
Animal::breathe(); //在子类方法中添加父类方法即可,“::”表示作用域
cout<<"Fish bubble"<<endl;
}
如果现在我在定义一个函数fn如下
void fn(Animal *pan)
{
pan->breathe();
}
在主函数中定义Animal类指针*p,定义Fish类对象fh,令p=&fh,将p带入函数fn,fn(p);输出会是什么?
答案——只有"Animal breathe"!Fish的“Fish bubble”哪去了?
这就涉及了C++的另一个特性——多态性,如果想在输出时带有Fish类特有的输出,只需在Animal类breathe方法前加上“virtual”即可
virtual void breathe()
{
cout<<"Animal breathe"<<endl;
}
“virtual”下,只要传的是子类的指针,在调用方法时,只要所调用的方法子类有就调用子类的,否则调用父类的。
Java中有抽象类,C++也有,Java中抽象类类名前需要写abstract关键字,C++不用,定义是正常写就行!
只需对抽象方法做改动,例将breathe方法改为抽象方法
virtual void breathe()=0;
在子类中将breathe方法实例化即可。