组合类、派生类 拷贝构造函数

在派生类中如何写拷贝构造函数

一种形式:派生类拷贝构造函数名(对象p的引用):基类构造函数名(参数列表)

如:student::student(student&p):stud(p.num,p.name,p.sex)
//注意,参数形式,是对象的引用,我们知道引用是C++特有的,这又是一个引用的用法 呵呵

一种形式:派生类拷贝构造函数名(对象p的引用):基类拷贝构造函数名(p)

如:student::student(student &p):stud( p)

注意:在调用基类的构造函数时或拷贝构造函数时,参数一定要干净,啥都不带,就是个参数名,如是数组就写数组名,如是对象,就写对象名!

组合类构造函数一般形式

#include <iostream>
#include<cmath>
using namespace std;
class Point
{
public:

Point(int xx=0,int yy=0){X=xx;Y=yy;}
 Point(Point &p);
 int GetX(){return X;}
 int GetY(){return Y;}
private:
 int X,Y;
};
Point::Point(Point &p):X(p.X),Y(p.Y){cout<<”Point拷贝构造函数被调用”<<endl;}
//拷贝构造函数或者可以使用下面的表示方法

//类的组合
 class Line
 {
   public:
    Line(Pointxp1,Point xp2);
    Line(Line&);
    doubleGetLen(){return len;}
   private:
    Pointp1,p2;
    doublelen;
 };

//组合类的构造函数

Line::Line(Point xp1,Pointxp2):p1(xp1),p2(xp2)  //构造函数
 {
 
 cout<<”Line构造函数被调用”<<endl;
 double x=double(p1.GetX()-p2.GetX());
 double y=double(p1.GetY()-p2.GetY());
len=sqrt(x*x+y*y);
 }
 //组合类的拷贝构造函数
 
 Line::Line(Line&L):p1(L.p1),p2(L.p2)//拷贝构造函数
 {
 cout<<”Line拷贝构造函数被调用”<<endl;
 len=L.len;
 }
 //主函数
 int main()
 {
 Point myp1(1,1),myp2(4,5);
 Line line(myp1,myp2);
 Line line2(line);
 cout<<”The lengthof the line is:”;
 cout<<line.GetLen()<<endl;
 cout<<”The lengthof the line2 is:”;
 cout<<line2.GetLen()<<endl;
 }

//注意常数据成员只能通过初始化列表来获得初值,如

#include <iostream>
using namespace std;
class A
{
public:
    A(inti);
 void print();
    const int&r;
private:
    const inta;
    static constint b;//静态常数据成员
};
const int A::b=10;//静态常数据成员在类外说明和初始化
A::A(int i):a(i),r(a)  //常数据成员只能通过初始化列表来获得初始值
   {
   }
void A::print()
{
cout<<a<<”:”<<b<<”:”<<r<<endl;
}
int main()
{
A a1(100),a2(0);
a1.print();
a2.print();
}

时间: 2024-08-23 15:38:56

组合类、派生类 拷贝构造函数的相关文章

条款十一: 为需要动态分配内存的类声明一个拷贝构造函数和一个拷贝赋值运算符

看下面一个表示string对象的类: // 一个很简单的string类 class string { public: string(const char *value); ~string(); ... // 没有拷贝构造函数和operator= private: char *data; }; string::string(const char *value) { if (value) { data = new char[strlen(value) + 1]; strcpy(data, value

C++类对象的拷贝构造函数分析

对于普通类型的对象来说,它们之间的复制是很简单的,例如: int a=100;int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量.下面看一个类对象拷贝的简单例子. #include <iostream>using namespace std;class CA{ public: CA(int b) { a=b; } void Show () { cout<<a<<endl; } private: int a;};int main(){

Python源码 -- C语言实现面向对象编程(基类&amp;派生类&amp;多态)

由于公司的ERP系统数据量大,有40G+的数据,并发用户90+,连接数1000+,原来的IO性能跟不上用户的操作响应需求,报表查询慢,该做的索引都做过了,索引每周重建一次,还是解决不了问题,为此,公司新购了dell poweredge R720xd服务器,该套服务器支持2个阵列,24个硬盘,双CPU,64G内存,比较牛X的了,我们创建两个raid,两块SAS硬盘做Raid1,6块SSD硬盘做Raid10,系统装好了,高兴呀,但结过测试发现,总有一个raid速度相当慢,和台式机速度一样,我地妈呀,

实现数组类(C++ 拷贝构造函数、拷贝函数)要判断赋值左右对象不相等,坑惨了

#include <iostream> using namespace std; class ArrayIndexOutOfBoundsException{ // 异常类 public: int index; ArrayIndexOutOfBoundsException(int k){ index = k; } }; class Array{ private: int *data; int size; static const int dSize = 10; // 数组默认大小 public:

基类派生类

看了c#的教程,也上网络上搜索基类与派生类的概念,一直没有一个很明确的定义.弄得偶一直很迷糊,现在搜索到c++的教程里倒是有比较明确的说明,特意贴在这里,帮助自己理解. 继承机制提供了无限重复利用程序资源的一种途径. 继承使得我们得以用一种简单的方式来定义新类.如果我们定义了一个哺乳动物类,包括哺乳动物的一些普通属性和方法,然后再定义一个狗类, 有没有必要重头开始定义呢?实际上这是没有必要的,因为狗是哺乳动物的一种特殊动物,定义狗类可以沿用哺乳动物类的所需的属性和方法,只需加上狗的颜色属性和狗尾

c++ 友元类 与 友元类派生类

定义: 当一个类B成为了另外一个类A的"朋友"时,那么类A的私有和保护的数据成员就可以被类B访问.我们就把类B叫做类A的友元. 用法: 在A类中加入: friend class B; 下面这个程序说明了友元类与友元派生类的权限. class A { public: friend class FriendA; private: int a; }; class FriendA { public: void print(A& ca) { //因为是友元类,所以可以访问A类的私有成员.

含有指针变量的类需要重写拷贝构造函数,拷贝赋值函数,析构函数

编译器自带拷贝构造(ctor)和拷贝赋值函数(operator =), 但是对于成员变量含有指针的类,其不能使用默认的拷贝赋值函数.因为使用默认的,会直接将指针指向的地址进行赋值 (浅拷贝,共享内存,共指一个对象),而不是分配一块内存,具有相同的数值 (深拷贝,独立,两个对象). 浅拷贝容易造成dangling pointer. 用一个例子来展示: 1 #ifndef __MYSTRING__ 2 #define __MYSTRING__ 3 4 class String{ 5 public:

类string的拷贝构造函数与赋值函数

//参考高质量c++编程 复制构造函数 1 String ::String (const String &other) 2 { 3 4 5 int length=strlen(other.m_date); 6 //other对象的字符长度,其不包括‘\0’ 7 m_data=new char[length+1]; 8 //在堆上开辟一块内存,内存大小包括'\0' 9 strcpy(m_data, other.m_data); 10 11 } 赋值构造函数 1 String &String

C++:派生类的默认构造函数和拷贝构造函数调用基类构造函数的机制(含程序验证)

1.如果基类定义了不带参数的默认构造函数,则编译器为派生类自动生成的默认构造函数会调用基类的默认构造函数. 2.如果基类定义了拷贝构造函数,则编译器为派生类自动生成的拷贝构造函数同样会调用基类的拷贝构造函数. 3.如果基类定义了带参数的构造函数,派生类没有定义任何带参数的构造函数,则不能直接调用基类的带参构造函数,程序编译不通过. 代码如下: #include<iostream> using namespace std; //基类Game,定义了两个构造函数和一个拷贝构造函数 class Ga

初学C++-----------------类的拷贝构造函数

拷贝构造函数能够使类具有自行赋值本类对象的能力,即可生成一个对象的副本,它只以本类对象的引用作为其唯一的形参,该函数的定义形式如下: class  类名 { public: 类名(形参)://(构造函数) 类名(类名  &对象名)://(拷贝构造函数) .................. }; 类名::类名(类名  &对象名)//拷贝构造函数的实现 { 函数体 } 拷贝构造函数举例: class Point { public: Point(int xx=0,int yy=0)   //构