如何在派生类中实现类的基本函数

基类的构造函数、析构函数、赋值函数都不能被派生类继承。如果类之间存在继承 关系,在编写上述基本函数时应注意以下事项:

派生类的构造函数应在其初始化表里调用基类的构造函数。

基类与派生类的析构函数应该为虚(即加 virtual 关键字)。

 1 #include <iostream>
 2
 3 /* run this program using the console pauser or add your own getch, system("pause") or input loop */
 4 using namespace std;
 5
 6     //add()函数的定义,其有返回值
 7 double add(double x,double y)
 8 {
 9     double z;
10     z=x+y;
11     cout<<x<<"+"<<y<<"="<<z<<endl;
12     return(z);
13 }
14
15 int main(int argc, char** argv) {
16
17
18     double a=0.5,b=1.0;
19
20     //以不同参数形式调用函数add()
21     cout<<"add(1.5,2.5)="<<add(1.5,2.5)<<endl;
22     cout<<"add(a,b)="<<add(a,b)<<endl;
23     cout<<"add(2*a,a+b)="<<add(2*a,a+b)<<endl;
24     cout<<"----------------------"<<endl;
25
26     //以表达式方式调用函数add()
27     double c=2*add(a,b);
28     cout<<"c="<<c<<endl;
29     cout<<"----------------------"<<endl;
30
31     //以语句式方式调用函数add()
32     add(2*a,b);
33     cout<<"----------------------"<<endl;
34
35     //用其他类型参数调用函数add()
36     int n=1,m=2;
37     cout<<"add("<<n<<","<<m<<")="<<add(n,m)<<endl;
38     return 0;
39 }

原文地址:https://www.cnblogs.com/borter/p/9406563.html

时间: 2024-12-19 22:50:02

如何在派生类中实现类的基本函数的相关文章

详解C++中基类与派生类的转换以及虚基类

很详细!转载链接 C++基类与派生类的转换在公用继承.私有继承和保护继承中,只有公用继承能较好地保留基类的特征,它保留了除构造函数和析构函数以外的基类所有成员,基类的公用或保护成员的访问权限在派生类中全部都按原样保留下来了,在派生类外可以调用基类的公用成员函数访问基类的私有成员.因此,公用派生类具有基类的全部功能,所有基类能够实现的功能, 公用派生类都能实现.而非公用派生类(私有或保护派生类)不能实现基类的全部功能(例如在派生类外不能调用基类的公用成员函数访问基类的私有成员).因此,只有公用派生

C++派生类与基类的转换规则

基类与派生类对象之间有赋值兼容关系,由于派生类中包含从基类继承的成员,具体表现在以下几个方面,需要的朋友可以参考下 只有公用派生类才是基类真正的子类型,它完整地继承了基类的功能.基类与派生类对象之间有赋值兼容关系,由于派生类中包含从基类继承的成员,因此可以将派生类的值赋给基类对象,在用到基类对象的时候可以用其子类对象代替. 具体表现在以下几个方面: 派生类对象可以向基类对象赋值. 可以用子类(即公用派生类)对象对其基类对象赋值.如 A a1; //定义基类A对象a1 B b1; //定义类A的公

C++类中变量定义初始化总结

1.类成员不可以在定义时初始化 2.const类型的成员必须在初始化化列表进行初始化:一般变量在在初始化列表中初始化的顺序决定于定义的顺序 #include<iostream> using namespace std; class A { private: int n1; int n2; public: A():n2(0),n1(n2+2){} void Print(){ cout << "n1:" << n1 << ", n2

C++中的类和对象(二)

一,对象的动态建立和释放 1.什么是对象的动态建立和释放 通常我们创建的对象都是由C++编译器为我们在栈内存中创建的,我们无法对其进行生命周期的管理.所以我们需要动态的去建立该对象,因此我们需要在堆内存中创建对象和释放对象.在C语言中为我们提供了malloc()函数和free()函数来为我们提供在堆内存中分配变量的方式,但是在C++中引入了new和delete关键字来让我们动态的创建和释放变量. 2.new和delete关键字 new关键字是用来在堆内存中创建变量的,格式为:Type * ptr

关于“只有静态常量整型数据成员才可以在类中初始化”

关于“只有静态常量整型数据成员才可以在类中初始化” 关于类中的静态成员变量, 在类中只能声明,不能定义注意在类的内部只是声明,不是定义 类中的静态变量是属于类的,不属于某个对象!不能在定义对象时对变量初始化!就时不能用构造函数来初始化!而且使用时应加上类名,而不是对象.例如: class A{ static int x; static int y; } int A::x=1; int A::y=2;//这样初始化! int main(){ cout<<A::x<<endl; cou

Scala学习(五)---Scala中的类

Scala中的类 摘要: 在本篇中,你将会学习如何用Scala实现类.如果你了解Java或C++中的类,你不会觉得这有多难,并且你会很享受Scala更加精简的表示法带来的便利.本篇的要点包括: 1. 类中的字段自动带有getter方法和setter方法 2. 你可以用定制的getter/setter方法替换掉字段的定义,而不必修改使用类的客户端,这就是所谓的"统一访问原则" 3. 用@BeanProperty注解来生成JavaBeans的getXxx/setXxx()方法 4. 每个类

JAVA笔记整理(三),JAVA中的类和方法

类 类是JAVA中一个重要的概念,可以把类理解成一个对象的抽象,这个抽象的对象包含了变量(用来描述这个对象的属性)和方法(用来描述这个对象可以干什么),类中的各个成员之间可以相互调用(static修饰的成员不能访问没有static修饰的成员). 而每个类中又必须有一个或者多个构造方法,这个构造方法用来将这个抽象的对象实例化. 类的定义格式为 [修饰符] class 类名{ 构造函数; 成员变量; 方法; } 在类中的构造函数.成员变量和方法都可以是0个或者多个 类的修饰符可以使用public.f

Scala中的类

Scala中的类 摘要: 在本篇中,你将会学习如何用Scala实现类.如果你了解Java或C++中的类,你不会觉得这有多难,并且你会很享受Scala更加精简的表示法带来的便利.本篇的要点包括: 1. 类中的字段自动带有getter方法和setter方法 2. 你可以用定制的getter/setter方法替换掉字段的定义,而不必修改使用类的客户端,这就是所谓的"统一访问原则" 3. 用@BeanProperty注解来生成JavaBeans的getXxx/setXxx()方法 4. 每个类

python类对象、类属性

一."class" 类名:实际上,当解释器执行class语句时,就会创建一个类对象. 二.类属性: 类属性是从属于类对象的属性,也称为"类变量".由于,类属性从属于类对象,可以被所有实例对象共享. class   类名: 类变量名 = 初始值 在类中或者类的外面,我们可以通过:"类名.类变量" 来读写. 原文地址:https://www.cnblogs.com/yingxiongguixing/p/12186077.html