C++类成员初始化总结以及面向对象编程原则

来源:互联网 发布:今目标软件下载 编辑:程序博客网 时间:2024/06/03 16:41
类成员初始化总结:(1)只有静态常量整形可以在类内初始化。如:static const int val1 = 1;(2)const成员(非static)和引用型成员只能且必须在构造函数初始化列表里初始化,非const非static可以在构造函数内部或者在其初始化列表初始化。(3)非const的static或者 非整形static const 都必须在类外部初始化。class Test{ private:const int var2;int var3;static int var4;static const double var5;static const int var6 = 6;//静态常量整形变量,可以在类内初始化 public:Test();//构造函数 };Test::Test(void):var2(2)//初始化列表初始化{var3 = 3;}//可以在函数内初始化,也可以像var2一样在类的初始化列表初始化 int Test::var4 = 4; //非const的static ,只能在类外初始化double Test::var5 = 5.0; //同非const的static,必须在类外初始化 

 

//节选自《新概念C++程序设计》

面向对象程序设计的基本原则(部分):

(1)合成/聚合优先原则。

简述为:尽量使用合成/聚合而尽量不使用继承(继承破坏封装性)。

(2)开-闭原则。

简述为:模块应该尽量在不修改原来代码的前提下扩展。

(3)面向抽象原则(又名依赖倒转原则)。

简述为:抽象不应该一来细节,细节应该依赖抽象。“面向接口编程。”

(4)单一职责原则。

通过分割职责来封装变化。

(5)接口分离原则。

使用多个专门的接口而非单一的总接口。

示例:

//计算圆面积class Circle{private:     static double P;        double radius; public:    Circle(){radius = 0;}    Circle(double r) {radius = r;}    double getArea() {return (P*radius*radius);}}; double Circle::P = 3.1415926; //继承方式,计算圆柱体体积class Pillar:public Circle{private:    double height;public:    Pillar(Circle r, double h):height(h),Circle(r){}    double getVolum() {return getArea()*height;}};//合成/聚合方式,计算圆柱体体积class Pillar1{private:    Circle bottom;    double heigt;public:    Pillar1(Circle b,double h):bottom(b),heigt(h){}    double getVolum(){return bottom.getArea()*heigt;}}; int main( ){    double r,h;    cout<<"Input the radius:"<<endl;    cin>>r;    Circle cir(r);    cout<<"The squre is: "<<cir.getArea()<<endl;    cout<<"Input the height:"<<endl;    cin>>h;    cout<<"The Volume is:"<<endl;    Pillar1 Vol(r,h);    cout<<Vol.getVolum()<<endl;    return 0;}//根据以上基本规则修改上述代码:#include <iostream>using namespace std;class shape//获得面积接口类{public:    virtual double getArea() = 0;};class drawphoto//画图接口类,与面积接口分离,单一职责原则{public:    virtual void draw() = 0;};class circle:public shape,public drawphoto{private:    static double Pi;    double radius;public:    circle(double r):radius(r){}    double getArea(){return Pi*radius*radius;}    void draw(){cout<<"draw a circle."<<endl;}};double circle::Pi = 3.1415;class pillar{private:    shape &sh;//合成/聚合优先    double height;public:    pillar(shape &s, double h):sh(s),height(h){}    double getVolum(){ return sh.getArea()*height;}    void draw(){cout<<"draw a pillar.\n";}};int main( ){    double r,h;    cout<<"Input the radius of the circle:"<<endl;    cin>>r;    circle cir(r);    cout<<"the squre of the circle is :"<<cir.getArea()<<endl;    cir.draw();    cout<<"Input the height of the pillar:"<<endl;    cin>>h;    shape &s = cir;//用实力类对象初始化接口引用    pillar pil(s,h);    cout<<"The volum of the pillar is :"<<pil.getVolum()<<endl;    pil.draw();    return 0;}上述代码中,如果添加求正方形面积,只需添加正方形类并继承shape和drawphoto,求体积的时候不需要修改pillar,属于面向接口编程,符合开-闭原则。

0 0
原创粉丝点击