java
什么叫做虚基类?
一、什么叫做虚基类?
即编译器无法确定你在d。f()中要调用的函数f到底是哪一个。这里可能会让人觉得有些奇怪,命名只定义了一个CA::f,既然大家都派生自CA,那自然就是调用的CA::f,为什么还无法确定呢?
这是因为编译器在进行编译的时候,需要确定子类的函数定义,如CA::f是确定的,那么在编译CB、CC时还需要在编译器的语法树中生成CB::f,CC::f等标识,那么,在编译CD的时候,由于CB、CC都有一个函数f,此时,编译器将试图生成这两个CD::f标识,显然这时就要报错了。
(当我们不使用CD::f的时候,以上标识都不会生成,所以,如果去掉d。
f()一句,程序将顺利通过编译)
要解决这个问题,有两个方法:
1、重载函数f():此时由于我们明确定义了CD::f,编译器检查到CD::f()调用时就无需再像上面一样去逐级生成CD::f标识了;
此时CD的元素结构如下:
|CB(CA)|
|CC(CA)|
故此时的sizeof(CD) = 8;(CB、CC各有一个元素k)
2、使用虚拟继承:虚拟继承又称作共享继承,这种共享其实也是编译期间实现的,当使用虚拟继承时,上面的程序将变成下面的形式:
#include
#include
class CA。
二、设置虚基类的目的?
它的目的是消除二义性。
当在多条继承路径上有一个公共的基类,在这些路径中的某几条汇合处,这个公共的基类就会产生多个实例(或多个副本),若只想保存这个基类的一个实例,可以将这个公共基类说明为虚基类。
虚基类的基本原则是在内存中只有基类成员的一份拷贝。这样,通过把基类继承声明为虚拟的,就只能继承基类的一份拷贝,从而消除歧义。用virtual限定符把基类继承说明为虚拟的。
三、c++ 定义虚基类Shape,在Shape类的基础上?
#include<iostream>
using namespace std;
class Shape
{
public:
void CreateShape();
};
void Shape::CreateShape()
{
cout<<"创建一个图形"<<endl;
}
class Rectangle:virtual public Shape
{
public:
Rectangle(float a,float b);
float getArea();
private:
float m_fLength;
float m_fWidth;
float m_fArea;
};
Rectangle::Rectangle (float a,float b)
{
m_fLength=a;
m_fWidth=b;
cout<<"The Length of Rectangle is "<<m_fLength;
cout<<"The Width of Rectangle is "<<m_fWidth;
}
float Rectangle::getArea()
{
m_fArea=m_fLength*m_fWidth;
return m_fArea;
}
class Circle:virtual public Shape
{
public:
Circle(float r);
float getArea();
private:
float m_fRadius;
float m_fArea;
};
Circle::Circle(float r)
{
m_fRadius=r;
cout<<"The Radius of Circle is "<<m_fRadius;
}
float Circle::getArea()
{
m_fArea=3.1415*m_fRadius*m_fRadius;
return m_fArea;
}
int main()
{
Rectangle R1(3.0,2.0);
R1.CreateShape();
cout<<"The area of this rectangle is:"<<R1.getArea()<<endl;
Circle C1(3.0);
cout<<"The area of this circle is:"<<C1.getArea()<<endl;
return 0;
}
四、Java派生类?
在java的继承关系中,新的类称为子类,也叫派生类。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力,是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。举例:class A extends B{//这里B叫做父类或者基类,A叫做子类或者派生类}
五、Java日期工具类?
Java日期工具类:可以进行日期转化、今天日期、昨天日期、明天日期、指定日期,非常实用。
想必程序员在开发过程中,遇到日期转化肯定避免不了的。它让人爱恨不已,而有些又记不住,每次遇到都得问度娘。我最近在开发过程中亦是如此。
为了让自己更好的记忆,方便以后遇到日期类型转化相关开发。因此,自己作了适当的整理,编写了一个Java日期工具类,包括获得今天日期、昨天日期、明天日期、日期和字符串之间转化等相关转化。希望这个日期工具类,也能提高你对日期转化的开发效率。
日期工具类:DateTools.java
package com.geshanzsq;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
/**
* 日期工具类
* @author 格姗知识圈
*/
public class DateTools {
/**
* 日期转化为指定日期格式类型
* @param date 日期
* @param pattern 日期格式类型,如yyyy-MM-dd,yyyy年MM月dd日 HH:mm:ss
* @return
*/
public static String dateToString(Date date,String pattern){
SimpleDateFormat sdf = new SimpleDateFormat(pattern);//日期格式
String date_str = sdf.format(date);//日期转化为指定格式
return date_str;
}
/**
* 日期字符串转化为指定日期格式类型
* @param date_str 日期字符串
* @param pattern 日期格式类型,如yyyy-MM-dd,yyyy年MM月dd日 HH:mm:ss
* @return
* @throws ParseException
*/
public static Date stringToDate(String date_str,String pattern) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);//日期格式
Date date = sdf.parse(date_str);//日期转化为指定格式
return date;
}
/**
* 获得今天日期
* @param pattern 日期格式类型,如yyyy-MM-dd,yyyy年MM月dd日 HH:mm:ss
* @return
*/
public static String getToday(String pattern){
Date date = new Date();//今天日期
SimpleDateFormat sdf = new SimpleDateFormat(pattern);//日期格式
String today = sdf.format(date);//日期转化为指定格式
return today;
}
/**
* 获得明天日期
* @param pattern 日期格式类型,如yyyy-MM-dd,yyyy年MM月dd日 HH:mm:ss
* @return
*/
public static String getTomorrow(String pattern){
Date date = new Date();//今天日期
Calendar cal = new GregorianCalendar();
cal.setTime(date);//设置时间
cal.add(Calendar.DATE,1);//把日期往后增加一天.整数往后推,负数往前移动
date = cal.getTime();//这个时间就是日期往后推一天的日期结果,即明天日期
SimpleDateFormat sdf = new SimpleDateFormat(pattern);//日期格式
String tommorrow = sdf.format(date);//明天日期
return tommorrow;
}
/**
* 获得昨天日期
* @param pattern 日期格式类型,如yyyy-MM-dd,yyyy年MM月dd日 HH:mm:ss
* @return
*/
public static String getYesterday(String pattern){
Date date = new Date();//今天日期
Calendar cal = new GregorianCalendar();
cal.setTime(date);//设置时间
cal.add(Calendar.DATE,-1);//把日期往后增加一天.整数往后推,负数往前移动
date = cal.getTime();//这个时间就是日期往前推一天的日期结果,即昨天日期
SimpleDateFormat sdf = new SimpleDateFormat(pattern);//日期格式
String yesterday = sdf.format(date);//昨天日期
return yesterday;
}
/**
* 获得指定日期的后一天
* @param date 指定日期
* @param pattern 日期格式类型,如yyyy-MM-dd,yyyy年MM月dd日 HH:mm:ss
* @return
* @throws ParseException
*/
public static Date getAfterDay(Date date,String pattern) throws ParseException {
Calendar cal = new GregorianCalendar();
cal.setTime(date);//设置时间
cal.add(Calendar.DATE,1);//把日期往后增加一天.整数往后推,负数往前移动
date = cal.getTime();//这个时间就是日期往后推一天的日期结果,即后一天日期
SimpleDateFormat sdf = new SimpleDateFormat(pattern);//日期格式
String next_date_str = sdf.format(date);//后一天日期
//将日期字符串转化为指定日期格式类型
Date after_date = stringToDate(next_date_str,pattern);
return after_date;
}
/**
* 获得指定日期的后一天
* @param date_str 指定日期字符串
* @param pattern 日期格式类型,如yyyy-MM-dd,yyyy年MM月dd日 HH:mm:ss
* @return
* @throws ParseException
*/
public static String getAfterDay(String date_str,String pattern) throws ParseException {
//将日期字符串转化为指定日期格式类型
Date date = stringToDate(date_str,pattern);
Calendar cal = new GregorianCalendar();
cal.setTime(date);//设置时间
cal.add(Calendar.DATE,1);//把日期往后增加一天.整数往后推,负数往前移动
date = cal.getTime();//这个时间就是日期往后推一天的日期结果,即后一天日期
SimpleDateFormat sdf = new SimpleDateFormat(pattern);//日期格式
String after_date_str = sdf.format(date);//后一天日期
return after_date_str;
}
/**
* 获得指定日期的前一天
* @param date 指定日期
* @param pattern 日期格式类型,如yyyy-MM-dd,yyyy年MM月dd日 HH:mm:ss
* @return
* @throws ParseException
*/
public static Date getBeforetDay(Date date,String pattern) throws ParseException {
Calendar cal = new GregorianCalendar();
cal.setTime(date);//设置时间
cal.add(Calendar.DATE,-1);//把日期往后增加一天.整数往后推,负数往前移动
date = cal.getTime();//这个时间就是日期往后推一天的日期结果,即前一天日期
SimpleDateFormat sdf = new SimpleDateFormat(pattern);//日期格式
String before_date_str = sdf.format(date);//前一天日期
//将日期字符串转化为指定日期格式类型
Date before_date = stringToDate(before_date_str,pattern);
return before_date;
}
/**
* 获得指定日期的前一天
* @param date_str 指定日期字符串
* @param pattern 日期格式类型,如yyyy-MM-dd,yyyy年MM月dd日 HH:mm:ss
* @return
* @throws ParseException
*/
public static String getBreforeDay(String date_str,String pattern) throws ParseException {
//将日期字符串转化为指定日期格式类型
Date date = stringToDate(date_str,pattern);
Calendar cal = new GregorianCalendar();
cal.setTime(date);//设置时间
cal.add(Calendar.DATE,-1);//把日期往后增加一天.整数往后推,负数往前移动
date = cal.getTime();//这个时间就是日期往后推一天的日期结果,即前一天日期
SimpleDateFormat sdf = new SimpleDateFormat(pattern);//日期格式
String before_date_str = sdf.format(date);//前一天日期
return before_date_str;
}
}
测试类:Test.java
package com.hrg;
import java.text.ParseException;
/**
* 测试类
* @author 格姗知识圈
*/
public class Test {
public static void main(String[] args) throws ParseException {
//日期格式类型
String pattern = "yyyy-MM-dd";
//获得今天日期
System.out.println("---------获得今天日期---------");
String today = DateTools.getToday(pattern);
System.out.println("今天日期:"+today);
//获得明天日期
System.out.println("---------获得明天日期---------");
String tomorrow = DateTools.getTomorrow(pattern);
System.out.println("明天日期:"+tomorrow);
//获得昨天日期
System.out.println("---------获得昨天日期---------");
String yesterday = DateTools.getYesterday(pattern);
System.out.println("昨天日期:"+yesterday);
//获得指定日期的后一天
System.out.println("---------获得指定日期的后一天---------");
String date_str = "2018-10-03";
System.out.println("指定日期:"+date_str);
String after_date = DateTools.getAfterDay(date_str,pattern);
System.out.println("指定日期的后一天:"+after_date);
//获得指定日期的后一天
System.out.println("---------获得指定日期的前一天---------");
System.out.println("指定日期:"+date_str);
String before_date = DateTools.getBreforeDay(date_str,pattern);
System.out.println("指定日期的前一天:"+before_date);
}
}
运行结果:
---------获得今天日期---------
今天日期:2018-11-20
---------获得明天日期---------
明天日期:2018-11-21
---------获得昨天日期---------
昨天日期:2018-11-19
---------获得指定日期的后一天---------
指定日期:2018-10-03
指定日期的后一天:2018-10-04
---------获得指定日期的前一天---------
指定日期:2018-10-03
指定日期的前一天:2018-10-02
你看完之后,相信对日期转化有了更好的了解。当然,代码里面有部分是冗余的,主要是为了方便让大家清晰看懂。你看懂理解后,可以根据业务需要进行适当的修改。
六、java类是什么?
Java类就是class,用于承载代码逻辑的文本,也就是你开发的业务。
七、Java的接口和C++的虚类的相同和不同处?
c++虚类相当与java里面的抽象类,与接口的不同之处如下:
1、一个子类只能继承一个抽象类(虚类),但能实现多个接口;
2、一个抽象类可以有构造方法,接口没有构造方法;
3、一个抽象类中的方法不一定是抽象方法,即其中的方法可以有实现(有方法体),接口中的方法都是抽象方法,不能有方法体,只有声明;
4、一个抽象类可以是public、private、protected、default,
接口只有public;
5、一个抽象类中的方法可以是public、private、protected、default,
接口中的方法只能是public和default.
相同之处:都不能实例化。
补充说明:接口是一类特殊的抽象类,是更抽象的抽象类,你可能这样理解。抽象类是一个不完整的类,接口只是定义了一些功能。打个比方,用抽象类和接口分别描述“猪”,抽象类就是在一般的类之前加abstrict,说:猪能用四肢跑,猪还能怎么怎么,接口的话只能说,猪会跑,用什么跑就是子类的事啦。
八、java迷宫move类意思?
这是一个典型的pojo类,里面封装了set和get方法.两个变量intX和intY是需要移动的坐标,构造一个move类可以有无参和有参两种方法,而且可以用setX和setY来设置某个move对象的属性,用getX和getY来获取某个move对象的属性
九、java什么叫工具类?
我觉得这个问题好像一句话就能概括,Java工具类就是可以实现某个特定功能的类。
当然这个类必须具有一个特点,就是可重用性。如果一段代码仅仅在程序中使用一次,那么抽取出来的意义就不大。只有当某段代码需要在多个地方使用时,就可以考虑对这段代码进行抽取。
Java中的工具类大概分两种:已有的和自己编写的。由于Java已经存在了十几年,且一直很火。除了JDK自带的一些工具类外,现在还有不少由别的企业或组织写的工具类。比如:Apache的各种XXUtils, Hutool的各种utils等。如果有现成的工具类,我们还是直接引用就好。但是,有时候网上的工具类并无法满足我们的业务需求,这时候就需要自己编写。
十、java图形类是什么?
java图形类库常见的有swing和swt,这两个用的比较多些,像著名的开源工具eclipse就是swt开发的。如果你问得是画图的类的吧,一般是Graphics2D
热点信息
-
在Python中,要查看函数的用法,可以使用以下方法: 1. 使用内置函数help():在Python交互式环境中,可以直接输入help(函数名)来获取函数的帮助文档。例如,...
-
一、java 连接数据库 在当今信息时代,Java 是一种广泛应用的编程语言,尤其在与数据库进行交互的过程中发挥着重要作用。无论是在企业级应用开发还是...
-
一、idea连接mysql数据库 php connect_error) { die("连接失败: " . $conn->connect_error);}echo "成功连接到MySQL数据库!";// 关闭连接$conn->close();?> 二、idea连接mysql数据库连...
-
要在Python中安装modbus-tk库,您可以按照以下步骤进行操作: 1. 确保您已经安装了Python解释器。您可以从Python官方网站(https://www.python.org)下载和安装最新版本...