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方法執行個體化即可。