类的设计

设计一个名为Triangle的来扩展GeometricObject 设计一个名为Triangle的来扩展GeometricObject。该包括: 三个名为side1、side2和side3的double数据域表示这个三角形的三条边,他们的默认值是1.0. 一个无参构造方法创建默认的三角形。 一个能创建带指定side1,side2和side3的三角形构造方法。 所有三个数据域的访问器方法。 一个名为getArea()的方法返回这个三角形的面积。 一个名为ge... 阅读详情
一、构造函数:简单的类不需要构造函数,它们的结构就是它们的接口。复杂的类需要构造函数来隐藏它们内部工作方式。

二、数据成员:数据成员应该设置为私有,通过共有接口来修改、读取私有成员变量。如:

template<class T> class Vector
{
public:
	int get_length() const;
	int set_length();

private:
	int length;
}

三、无参构造函数:如果一个类有了构造函数,而你想声明该类的对象可以不必显示地初始化它们,则必须显示的写一个无参的构造函数。

四、析构函数:不是所有的类都需要析构函数,如果该类分配了资源,而这些资源又不会由成员函数自动释放,此时需要有析构函数,特别是构造函数里包含new表达式的类。

五、虚析构函数:派生类对象的基类指针执行delete表达式,基类就需要一个虚析构函数。如:

#include<iostream>
#include<string>
using namespace std;

class B{
public:
	B(){cout<<"B constucting...";}
	virtual ~B(){cout<<"B destructing....";}
private:
	string s;
};
class D:public B{
public:
	D(){cout<<"D constucting...";}
	virtual ~D(){cout<<"D destructing....";}
private:
	string t;
};
void main()
{
	B *pt=new D;
	delete pt;
}

六、复制构造函数:

1、是否需要复制构造函数,关键在于:复制该类的对象是否就相当于复制其数据成员和基类对象,如果并不相当,就需要复制构造函数。

2、 如果该类的构造函数中有分配资源,则需要一个显式的复制构造函数来管理资源。如果不是用复制构造函数,如果复制一个类的成员对象(数据成员分配资源,指针),两 个对象将会指向同一个内存,,当着两个对象销毁时,这个内存就会销毁两次。

3、如果不想用户能够复制类的对象,就声明复制构造函数(可能还有赋值操作符)为私有。如:

class Thing{
public:
	//...
private:
	Thing(const Thing&);
	Thing& operator=(const Thing&);
};

七、赋值操作符:类X的赋值由X::operator=来定义。通常,operator=应该返回一个X&,并且由return *this;结束,以保证与内建的复制操作符一致。

 赋值的过程:“先释放旧值,再赋值”。

#include<string>
class String{
public:
	String& operator=(const String& s);
private:
	char* data;
};
//方法一:避免赋值给本身
String& String::operator=(const String& s)
{
	if(&s != this)
	{
		delete[] data;
		data = new char[strlen(s.data)+1];
		strcpy(data,s.data);
	}
	return *this;
}
//方法二:将旧的目标值保存下来,直到原值赋值完成
String& String::operator=(const String& s)
{
	char* newdata = new char[strlen(s.data)+1];
	strcpy(newdata,s.data);
	delete[] data;
	data = newdata;
	return *this;
}
注:一个成员函数确定不需要修改它的对象,就应该定义为const;


八、构造函数的单件模式:对于某些用途的类,必须确保在程序运行过程中最多只有一个实例。单件模式很适合这种场合。
单件模式实现的技巧是将构造函数私有化,这样就禁止了直接定义对象变量和用new生成对象。但将构造函数设为私有的话,又如何去生成那个唯一的对象呢?

class Singleton{
    private:
        Singleton(){
            // more code
        }
        static Singleton *thisInstance;
        // more code
    public:
        static Singleton *getInstance();
        // more code
};
Singleton *Singleton::thisInstance=NULL;
Singleton *Singleton::getInstance(){
    if (thisInstance==NULL)
        thisInstance=new Singleton();
    return thisInstance;
}
如此一来,要取得Singleton的实例,只能用getInstance函数。getInstance函数必须是静态(Static)的,这样才能在还没有实例的时候使用这个函数。而getInstance又是Singleton类里的函数,当然是可以在其中使用new来生成对象了。所以说虽然将类的构造函数私有化了,但构造函数本身还是有意义的,它会在构建第一个,也是唯一一个实例的时候执行。同时,保证了不会出现多于一个的实例。

编程规则 - 3 设计规则 (2) 设计的基本要求 3.3 设计的基本要求     上面讲述了系统设计设计的基本规则,理论性较强,你也许一段时间难以理解好,下面介绍设计的基本要求,更加易于实践,你需要认真做好,上面的那些规则你可以在实践过程中逐步理解,软件设计是一门实践科学,纸上谈兵永远难以得其门而入,实践是最好的老 阅读详情

相关推荐

【编号326】全国地灾数据全国25万多个地质灾害点空间分布数据

全国地质灾害点分布数据涵盖25万多个各灾害点信息,为灾害防治提供重要依据。通过分析灾害分布规律,可识别高风险区,指导监测预警、应急避险和基础设施建设。多地成功案例(如湖北兴山崩塌避险、重庆长寿滑坡预警、湖南"挪床行动")证明,提前预警和科学防治能有效避免人员伤亡。云南省2024年通过预警体系成功避让31起灾害,保护1342人生命安全。这些实践表明,地质灾害防治需结合科技手段与群防体系,实现早预警、早处置。

千奇百怪无奇不有 1431

第五章 - 的分析与设计

定义 对未来系统的功能进行总体上的概括并使用UML的图进行表达。 在开始阶段粗略的对模型进行构建,后续再通过迭代逐级具体化,是一个逐步求精的设计过程。 初始图要覆盖所有需求的功能,并通过优化尽量保持业务结构的稳定,然后通过修订和丰富细节逐渐过渡到详细设计,并最终转化为成功的物理实现。 基本的确定 设计阶段的主要任务是从需求分析阶段的规格说明出发,对系统进行模型表示并优化。 面向对象的概要设计首先寻找系统中参与业务处理的对象和。 然后使用图(Class Diagram)将系统中不同的抽象出来

qq_42739587的博客 7848

Synopsys逻辑工艺库(DC综合)

逻辑库包括仅与综合过程有关的信息且通过DC用于设计的综合和优化。这一信息包括引脚到引脚的时序、面积、引脚型和功耗以及其他DC需要的必须数据。逻辑库是一个文本(通常扩展名".lib"),通过使用Library Compiler(LC)编译生成带有扩展名名".db"的二进制文件。以SMIC的逻辑综合库为例:库文件下载地址。

baidu_34971492的博客 2368

设计(1)

侯捷c++高级编程学习

m0_51972034的博客 520

如何正规的、大气的设计一个

如何正规的、大气的设计一个? 1、前言 本篇文章主要是培养正规的、大气的编程习惯,文章的构思来源来自中国台湾著名专家侯捷 – c++面向对象程序设计课程。 每个人的编程水平都不一样,所以本篇文章对于一部分人来说,可能并没有什么用;文章主要想给大家传达一种设计习惯。 2、class设计的分 这里明确将设计分成基于对象和面向对象两种,逐步深入。 基于对象设计:也即是简单的,没有间关系的,这里又被分为,不含指针成员的和含指针成员的。 面向对象设计:也即是复杂的,含有间关系的

「小白学移动机器人」一个专注分享移动机器人相关知识的公众号! 1236

设计原则及设计模式(一篇就够)

设计的六大原则 在阿里巴巴的设计规范中有提交设计原则。* 开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象,后面的具体设计中我们会提到这点。 里氏代换原则(Liskov Substitution Principle) 里氏代换原则(Liskov Substitution Princi

gonghaiyu的博客 5761

设计

设计 设计方法 [转] from:http://www.cnblogs.com/seandotnet/archive/2006/12/25/603114.html 1) 名首字母应该大。字段、方法以及对象(句柄)的首字母应小。对于所有标识符,其中包含的所有单词都应紧靠在一起,而且大中间单词的首字母。例如: ThisIsAClassName thisIsMethodOrFie...

weixin_30602505的博客 441

如何设计一个

设计一个优秀的,需要兼顾代码的清晰性、复用性和可维护性。遵循单一职责原则、封装性、高内聚低耦合等面向对象的设计思想,不仅能够提升代码质量,还能更高效地应对复杂的业务需求。在实际开发中,结合具体的场景和需求,灵活运用这些原则,就能设计出既实用又优雅的。免费征集 | 自动化需求还在为重复性工作头疼?数据处理耗时过长?我们正在免费征集 自动化需求,无论是文件整理、报表生成、邮件处理还是网页爬取,只要您有需求,我愿意免费为您编脚本,让繁琐任务一键完成!🎯 我们能帮您做什么?

游客520 1158

设计概述

设计概述 编程序前的设计与思考1.分析业务,从业务流和业务规则中归纳出领域对象.这些对象一般放在src/com/yourname/domain下.2.根据业务,考虑为领域对象提供完整的服务需要那些服务.这些对象一般放在src/com/yourname/service下.3.思考从输入开始,到输出结束,程序要运行正常,服务需要那些属性和方法,这些成员代表什么意义具有什么价值,方法的

CherryPeng的专栏 1256

好的设计

在软件开发中,设计是一个非常重要的环节,它决定了代码的可维护性和可扩展性,一个好的设计可以使代码更易于理解、维护和扩展,同时减少错误的发生。然而,在实际开发中,由于各种原因,我们经常会遇到一些设计不合理、依赖关系复杂、难以维护的,这些不仅会影响代码的质量,还会降低开发效率。

D0126_的博客 508

设计一个学生&班级

第一题 设计一个学生 属性:姓名、学号、年龄、成绩 设计一个班级要求:实现向班级中添加学生、删除学生、查看学生、按照指定条件排序 属性:班级代号,所有学生 需要使用 calss, __int__, __str__, sort, append, dict, list, remove, for in class Stu: # 设置学生基础属性 ...

weixin_33756418的博客 3590

java学生设计_学生设计

7-2 学生设计 (20分)设计一个Student,并在Main中生成Student对象进行测试1.对于Student设计私有属性name和age,并为每一个成员变量name和age设计其setXXX()和getXXX()方法,并对于setAge方法,如果age被赋值为<=6,则age值为7,其他为参数值。2.对于Student设计无参构造方法,在构造方法中为age赋值为7,...

weixin_31054839的博客 3329

设计应该怎么设计

突然最近在设计的时候,有所感悟,但是肯定不全,记录以下。 设计具有包含性,怎么体会这个点 举个例子,比如我们在开发的时候要定义一些状态量去设置看这个的变化,其实从其他角度来看,我们设计这个的时候,是不是应该考虑里有这个状态量,作为它的属性呢? 比如:机票作废这个功能,,作废这个状态呢怎么去设计呢? 普通工程师设计:人去作废机票。高级工程师设计:机票有作废的这个属性。 后期会继续补充自己的心得。 ...

pvmsmfchcs的博客 742

java的设计_Java 设计技巧

摘自《Java核心技术》卷I:基础知识 p140 第4章对象与 - 设计技巧1)一定将数据设计为私有。最重要的是:绝对不要破坏封装性。有时候,需要编一个访问器方法或更改器方法,但是最好还是保持实例域的私有性。很多惨痛的经验告诉我们,数据的表示形式很可能会改变,但它们的使用方式却不会经常发生变化。当数据保持私有时,它们的表示形式的变化不会对的使用者产生影响,即使出现bug也易于检测。2)一定...

weixin_30767895的博客 781

初学呐喊!——Java设计以及使用设计好的

第二单元 第一部分——设计和编 特别提醒 软件开发:先设计,再开发; 先思考设计,根据设计代码 1.如何设计 用什么工具? EA(Enterprise) Architecture VP Rational Rose StarUML:搜索UML工具 谁开设计? 系统分析师,系统分析员:软考中级 1.1设计 1.面向的编程主线(步骤) ,创造对象,对象调用方法 2.什么是就是型的缩/简称:是抽象的,不具体,不明确。同事物的概括; :手机,学生,鼠标,电脑,桌子 3.什么是对象

weixin_48318054的博客 501

UML设计

设计模式(2):UML图 UML图   解释UML图: 1.       首先看“动物”矩形框,它代表一个。该图分为三层,第一层显示的名称,如果是抽象就要用斜体显示。第二层是的特性,通常就是字段和属性。第三层是的操作,通常是方法和行为。注意前面的符号,‘+’表示public, ‘—’ 表示private, ‘#’表示protected.

1万+

设计一个BankAccount

设计一个BankAccount 设计一个BankAccount,这个包括: (1)一个int型的balance表时账户余额。 (2)一个无参构造方法,将账户余额初始化为0。 (3)一个带一个参数的构造方法,将账户余额初始化为该输入的参数。 (4)一个getBlance()方法,返回账户余额。 (5)一个withdraw()方法:带一个amount参数,并从账户余额中提取amount指定的款额。 (6)一个deposit()方法:带一个amount参数,并将amount指定的款额存储到该银行账户上。 设

caixiaobai123的博客 1万+

关于设计

看了robert的《敏捷软件开发》后真不知道怎么设计比较好,虽然符合srp(单一责任原则)和isp(接口分离)原则会给我带来灵活。可是会产生大量的和接口。如果是设计库,也许不是个好办法。看来rober是不喜欢胖胖的了。

小城序员 1475

如何设计一个python_如何设计好一个python的

以下经验来自《Big Java》一书中,但是设计作为面向对象语言共通的特点,我相信这些经验也会帮助题主设计python的,每个小标题下的文字说明是我对这些经验的理解。1.设计一个最重要的是它要表示了来自问题领域中的一个概念要表示一个问题领域的概念,问题领域可以是什么呢?我们需要分析问题,判断出它归属的领域,然后根据这个领域中,思考有哪些概念需要被用于这个问题。概念是什么?概念是把事物的共...

weixin_39898733的博客 628

相控阵波束形成Matlab仿真

相控阵波束形成Matlab仿真

上一篇: 迭代器的类型及操作
下一篇: 内存管理一
Study_more
博客等级 码龄15年 51粉丝 51原创
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值