c++-純虚関数と抽象クラス

4961 ワード

#define _CRT_SECURE_NO_WARNINGS#include
using namespace std;
//グラフィッククラス//クラスに純粋な虚関数がある場合//このクラスを抽象クラスと呼ぶ.//このクラスにメンバー属性があるかどうかにかかわらず、このクラスに純粋な虚関数があれば抽象クラスであり、抽象クラスはインスタンス化できない.class Shape{public://グラフィック面積を求める方法//グラフィッククラス宣言メソッドgetArea()を表します.これは純粋な虚関数であり、関数の実装はありません.virtual double getArea()=0;};
//三角形class Tri:public Shape{public:Tri(int a,int h){this->a=a;this->h=h;}virtual double getArea(){cout<<「三角形の面価を求める」<private:int a;int h;};
//正方形://普通のクラスといえば、純虚関数を持つクラスを継承し、純虚関数を書き直さないといえば抽象クラスです.//インスタンス化するには、この親クラスのすべての純粋な虚関数class Rect:public Shape{public:Rect(int a){this->a=a;}を書き換える必要があります.virtual double getArea(){cout<<「正方形で面積を求める」<class Circle :public Shape{public:Circle(int r){this->r = r;}
virtual double getArea()
{
    cout << "     " << endl;

    return 3.14*r * 4;
}

private:int r;};
//抽象クラス向けアーキテクチャ関数void printArea(Shape*sp){sp->getArea();}
//ビジネス層向けの抽象クラスプログラミングint main(void){//mainで使用されるすべての変数タイプは抽象クラスShapeのタイプです.Shape*sp 1=new Rect(10);//sp sp 1->getArea();
Shape *sp2 = new Circle(20);
//sp2->getArea();

Shape *sp3 = new Tri(10, 20);
//sp3->getArea();

printArea(sp1);
printArea(sp2);
printArea(sp3);

return 0;

}前の知識の小さな練習#define_CRT_SECURE_NO_WARNINGS#include
using namespace std;
//長兄の肩書きclass BigBrother{public://人を殴る.virtual void fightPeople()=0;};
//東方不敗class EastNeverLose:public BigBrother{public:virtual void fightPeople(){cout<<<「葵の宝典区を使って人を殴った」<//断崖なしclass Wuyazi:public BigBrother{public:virtual void fightPeople(){cout<<<「北冥の神功を使って人を殴る」<//bossint main(void){BigBrother *bigbrother = new Wuyazi;
//        。
bigbrother->fightPeople();

delete bigbrother;

return 0;

}純虚関数とマルチ継承#define_CRT_SECURE_NO_WARNINGS#include using namespace std;
//インタフェース1 class Interface 1{public:virtual void func 1(int a,int b)=0;virtual void func 3(int a,int b)=0;};
//インタフェース2 class Interface 2{public:virtual void func 2(int a)=0;};
class Child :public Interface1, public Interface2{public:virtual void func1(int a, int b){cout << "func1"<< endl;}virtual void func3(int a, int b) {cout << "func3"<< endl;
}

virtual void func2(int a)
{
    cout << "func2 " << endl;
}

};
int main(void){Interface1 *if1 = new Child;
if1->func1(10, 20);
if1->func3(100, 200);

Interface2 *if2 = new Child;

if2->func2(10);

return 0;

}コンピュータの組み立て--小さな練習#define_CRT_SECURE_NO_WARNINGS#include
using namespace std;
///---------------------//抽象CPU類class CPU{public:CPU();virtual void caculate()=0;}
//抽象的なcardクラスclass Card{public:virtual void display()=0;};
//抽象的なメモリクラスclass Memory{public:virtual void storage()=0;};
//アーキテクチャクラスclass Computer{public:Computer(CPU cpu,Card card,Memory*mem){this->cpu=cpu;this->card=card;this->mem=mem;}
void work()
{
    this->cpu->caculate();
    this->card->display();
    this->mem->storage();
}

~Computer() {
    if (this->cpu != NULL) {
        delete this->cpu;
    }
    if (this->card != NULL) {
        delete this->card;
    }
    if (this->mem != NULL) {
        delete this->mem;
    }
}

private:CPU cpu;Cardcard;Memory *mem;};//--------------------------
//---------------実装層-------//具体的なIntelCPU class IntelCPU:public CPU{public:virtual void caculate(){cout<<<class IntelCard:public Card{public:virtual void display(){cout<「Intel Cardが表示し始めた」<}
};
class IntelMem:public Memory{public:virtual void storage(){cout<<「Intel memが格納し始めた」<}
};
class NvidiaCard:public Card{public:virtual void display(){cout<<「Nvidiaグラフィックスが表示され始めた」<class KingstonMem:public Memory{public:virtual void storage(){cout<<「KingstonMemが格納し始めた」<//--------------------------
//-----------------------------int main(void){//1最初のintelシリーズのパソコンを組み立てる#if 0 CPU intelCpu=new IntelCPU;Card intelCard=new IntelCard;Memory*intelMem=new IntelMem;
Computer *com1 = new Computer(intelCpu, intelCard, intelMem);

com1->work();

Card *nCard = new NvidiaCard;
Memory* kMem = new KingstonMem;

Computer *com2 = new Computer(intelCpu, nCard, kMem);

com2->work();

delete intelCpu;

#endifComputer *com1 = new Computer(new IntelCPU, new IntelCard, new IntelMem);com1->work();delete com1;
return 0;

}深センウェブサイト建設www.sz 886.com