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
- C++类成员初始化总结以及面向对象编程原则
- 面向对象编程原则
- 面向对象编程原则
- 面向对象编程的原则
- 面向对象编程设计原则
- 面向对象编程六大原则
- 面向对象编程的原则
- 面向对象的编程原则
- 面向对象编程七大原则
- 面向对象原则的总结
- 面向对象原则小总结
- 面向对象设计原则总结
- 面向对象设计原则总结
- 类成员初始化总结
- [C++]类成员冒号初始化以及构造函数内赋值
- 【iOS 开发】Objective - C 面向对象 - 方法 | 成员变量 | 隐藏封装 | KVC | KVO | 初始化 | 多态
- 面向对象编程总结
- 面向对象编程以及Python面向对象
- PHP中实用的与安全有关的函数
- 文件下载
- hdu 1025 dp问题 学习笔记兼解题报告
- jdbc分页查询
- [Xcode]快捷键的使用
- C++类成员初始化总结以及面向对象编程原则
- 一道经典的题目(java编写)
- HTML5的未来
- CentOS下安装和配置MySQL-JDK-Tomcat-Nginx(个人官网环境搭建手册)
- Android Activity间动画跳转
- Java中如何调用WebService
- 上海找酒店小妹电话
- 关于WorkBench6.1-lError Code: 1175.错误
- Java NIO传输(一)