类的引用和复制

#include<iostream>

using namespace std;

class base{

public:

base(){}

virtual void func(int i = 12)

{

cout<<"base "<<i<<endl;

}

};

class Derived:public base{

public:

Derived(){}

virtual void func(int i = 22)

{

cout<<"Derived "<<i<<endl;

}

};

int main()

{

Derived d;

base& b1 = d;

base b2 = d;

b1.func();

b2.func();

d.func();

return 0;

}

输出: Derived 12

base 12

Derived 22

1.默认参数静态绑定

2.c++通过基类引用指针调用虚函数时,才发生动态绑定。

3.base& b1 = d; 把d地址赋给b1; base b2 = d;把d中base内容赋给b2;

时间: 2024-08-05 00:07:25

类的引用和复制的相关文章

C++学习体会--引用方式复制类对象

C++学习体会--引用方式复制类对象 引用的重要性实际体现在函数的形参和函数的返回值.一般引用也只是出现在这两个地方. 引用方式的好处,如果是体现在形参,在使用函数的时候,实参必定会初始化形参,如果不加引用,系统会创建实参的副本将值传递给形参,这样会造成资源额外的占用.为了节省资源的占用,通过一种引用的方式,达到这个效果,因为引用知识将实参的地址给了形参,处理形参,如同处理实参. 下面将给出程序使用的例子:引用的重要性体现在形参上 #include <iostream> using names

类相互引用问题

在C语言中,如果头文件不加任何保护的话,两个头文件相互包含会导致编译出错,如下面两个文件: a.h #include "b.h" b.h #include "a.h" 使用gcc编译的话,会报下面的错误: from main.c:2:b.h:1:15: error: #include nested too deeply #include "a.h" ^make: *** [all] Error 1 这是一个无限循环,如果加了保护性的代码,则不会出

接收本类的引用demo

package String; /* * 简单的写了一个接收本类的引用 * 所谓引用:引用传递就是指将堆内存空间的使用权交给多个栈内存空间 * 接收本类的引用:实际上在对象引用传递上也可以在一个类中接收自己的本类对象的实例,而且接收完之后,方便通过此对象直接进行本类中封装属性的访问 */ public class StringDemo3 { public static void main(String[] args) { person p2 = new person(); p2.settemp(

JavaScript语法细节——引用与复制

原文:JavaScript语法细节--引用与复制 我们都知道,JS中变量的赋值有两种方式,最近在折腾自己写的标签栏插件,碰到了很多平时没注意的问题.正好,那边处理清楚了,稍微整理一下关于引用与复制相关知识,可能会不定期增加新碰到的问题,有错误希望看到的人指出,避免传播不正确的知识. 先大致分一下类,引用类型:Object以及其旗下的Array,Date,RegExp,Function:基本包装类型:Boolean,number,String. 在赋值与传递参数的时候,引用类型传递的是指针,基本包

c++中两个类互相引用的问题

最近在改一个C++程序的时候碰到一条警告信息,警告信息为:“ 删除指向不完整“Q2DTorusNode”类型的指针:没有调用析构函数                1> c:\users\lxw\desktop\dragonfly第二阶段实验\最终的实验版本\实验目录\dragonfly_modify\src\Q2DTorus.h(6) : 参见“Q2DTorusNode”的声明 ” 警告信息很是奇怪,其实出于强迫症的原因想要解决掉这个警告信息,而且从警告信息来看,程序也应该存在内存泄露的问题,

C#使用基类的引用 and 虚方法和覆写方法

结论:使用基类的引用,访问派生类对象时,得到的是基类的成员. 虚方法和覆写方法

引用与复制

引用与复制(传值与传值) 引用:对象.数组.函数 复制:数字.布尔.字符串 引用: 1 var a = [1,2,3]; 2 var b = a; 3 b.push(4); //引用对自身的修改会影响其引用的对象(函数除外) 4 alert(a); //[1,2,3,4] var a = [1,2,3]; var b = a; b = [1,2,3,4]; //引用的重新赋值不会影响它原来的对象,这里相当于断开了原来的引用,新增了新的引用 alert(a); //[1,2,3] [注]函数的引用

C++中未定义类的引用。

在有时候因为类太大,需要在类在后面定义: 例如: class Y{ void f(X); }; class X{ //一些成员数据和函数 }; //error 因为c++要求任何一个变量在引用之前必须声明.,在上述定义中我们可以调换两者的顺序来实现. 但是如果形成了循环? class X{ void f1(Y) }; class Y{ void f(X); }; //error 这种就不能通过简单的调换顺序来通过编译器在调用之前必须声明的金科玉律了. 那么我们可以通过在上述中先声明? class

【C++】派生类对象初始化基类的引用

//派生类对象初始化基类的引用 //引用是别名,但这个别名只能包含派生类对象中的由基类继承来的隐藏对象 #include <iostream> using namespace std; class B { public: B() { cout<<"B"<<endl; } void fun() { cout<<"B::fun()"<<endl; } private: int x; }; class D : p