c++ 拷贝构造函数 继承
拷贝构造函数要求把所有变量都需要做拷贝。在有继承关系情况先,子类的拷贝构造函数,需要调用父类拷贝构造函数。示例代码如下:
class Base{
public:
virtual ~Base();
Base(const char *pStr);
Base(const Base &other);
virtual void CallFunction() ;
public:
char *m_pBase;
};
Base::Base(const char *pStr){
if (pStr) {
long iLen = strlen(pStr)+;
m_pBase = new char[iLen];
memset(m_pBase, , iLen);
strcpy(m_pBase, pStr);
}}
Base::~Base(){
if (m_pBase) {
delete [] m_pBase;
m_pBase = NULL;
}
}
Base::Base(const Base &other){
if (m_pBase) {
delete m_pBase;
m_pBase = NULL;
}
long iLen = strlen(other.m_pBase)+;
m_pBase = new char[iLen];
memset(m_pBase, , iLen);
strcpy(m_pBase, other.m_pBase);
}
class Child:public Base{
public:
~Child();
Child(const char *pStr , const char *pBase);
Child(const Child &other);
public:
char *m_pChild;
};
Child::Child(const char *pStr , const char *pBase):Base(pBase){//初始化列表中调父类构造函数
if (pStr) {
long iLen = strlen(pStr)+;
m_pChild = new char[iLen];
memset(m_pChild, , iLen);
strcpy(m_pChild, pStr);
}
}
Child::Child(const Child &other):Base(other){//调父类拷贝构造函数
if (m_pChild) {
delete m_pChild;
m_pChild = NULL;
}
long iLen = strlen(other.m_pChild)+;
m_pChild = new char[iLen];
memset(m_pChild, , iLen);
strcpy(m_pChild, other.m_pChild);
}
Child::~Child(){
if (m_pChild) {
delete [] m_pChild;
m_pChild = NULL;
}
}
Test:
Child ch("child", "base");
Child ch2(ch);
c++ 拷贝构造函数 继承的更多相关文章
- C++构造函数 & 拷贝构造函数 & 派生类的构造函数 & 虚继承的构造函数
构造函数 ,是一种特殊的方法 .主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中 .特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数 ...
- OOP3(继承中的类作用域/构造函数与拷贝控制/继承与容器)
当存在继承关系时,派生类的作用域嵌套在其基类的作用域之内.如果一个名字在派生类的作用域内无法正确解析,则编译器将继续在外层的基类作用域中寻找该名字的定义 在编译时进行名字查找: 一个对象.引用或指针的 ...
- C++类中的一些细节(重载、重写、覆盖、隐藏,构造函数、析构函数、拷贝构造函数、赋值函数在继承时的一些问题)
1 函数的重载.重写(重定义).函数覆盖及隐藏 其实函数重载与函数重写.函数覆盖和函数隐藏不是一个层面上的概念.前者是同一个类内,或者同一个函数作用域内,同名不同参数列表的函数之间的关系.而后三者是基 ...
- c++ 构造函数,拷贝构造函数,析构函数与赋值操作符
题目: 为下面的Rectangle类实现构造函数,拷贝构造函数,赋值操作符,析构函数. class Shape { int no; }; class Point { int x; int y; }; ...
- 【C++对象模型】构造函数语意学之二 拷贝构造函数
关于默认拷贝构造函数,有一点和默认构造函数类似,就是编译器只有在[需要的时候]才去合成默认的拷贝构造函数. 在什么时候才是[需要的时候]呢? 也就是类不展现[bitwise copy semantic ...
- javascript 封装 构造函数继承 非构造函数继承
1 封装 把"属性"(property)和"方法"(method),封装成一个对象,甚至要从原型对象生成一个实例对象 1.1 简单封装:var cat1 = { ...
- 如何避免被C++默认拷贝构造函数忽悠?
一.背景介绍 因为工作关系,需要用到C++编程.对于我来说,虽然一直从事的是linux平台下的嵌入式软件开发,但深入用到C++的特性的地方并不多.对于C++,用得最多的无非是指针. ...
- 拷贝构造函数,深拷贝,大约delete和default相关业务,explicit,给定初始类,构造函数和析构函数,成员函数和内联函数,关于记忆储存,默认参数,静态功能和正常功能,const功能,朋友
1.拷贝构造 //拷贝构造的规则,有两种方式实现初始化. //1.一个是通过在后面:a(x),b(y)的方式实现初始化. //2.另外一种初始化的方式是直接在构造方法里面实现初始化. 案比例如以 ...
- C++拷贝构造函数总结
C++拷贝构造函数总结 目录: 拷贝构造函数的基础知识 拷贝构造函数的使用 拷贝构造函数的行为 1.拷贝构造函数的基础知识 拷贝构造函数(copy constructor)是构造函数,是拷贝已经存在的 ...
随机推荐
- LeetCode OJ:Minimum Depth of Binary Tree(二叉树的最小深度)
Given a binary tree, find its minimum depth. The minimum depth is the number of nodes along the shor ...
- Ajax做日期选择
1.主页面 引入JS Jquery bootstrap 包 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN& ...
- HDU - 1506 Largest Rectangle in a Histogram (单调栈/笛卡尔树)
题意:求一个直方图中最大矩形的面积. 很经典的一道问题了吧,可以用单调栈分别求出每个柱子左右两边第一个比它低的柱子(也就相当于求出了和它相连的最后一个比它高的柱子),确定每个柱子的左右边界,每个柱子的 ...
- CodeForces - 651D:Image Preview (双指针&)
Vasya's telephone contains n photos. Photo number 1 is currently opened on the phone. It is allowed ...
- java多线程 生产者消费者案例-虚假唤醒
package com.java.juc; public class TestProductAndConsumer { public static void main(String[] args) { ...
- java-05String课堂练习
1.阅读以下代码查看输出结果 public class StringPool { public static void main(String args[]) { String s0="He ...
- window内置对象学习
1.location:本页面的location对象 对象属性图示: 对象属性: 对象方法: 2.history:是本页面的浏览历史 history对象记录了用户曾经浏览过的页面(URL),并可以实现浏 ...
- HTML(超文本标记语言)
学习地址:https://developer.mozilla.org/zh-CN/docs/Web/Html
- The Salt Master has rejected this minion's public key!
salt查看日志: salt --log-level=all "10.199.165.244" state.highstate 进入调试模式: salt-minion -l deb ...
- GWT异步更改cellTable中cell的数据显示
项目中遇到一个棘手的问题,使用GWT的cellTable的时候,要更改一个单元格的显示问题.如果仅仅是一个单独的cell 可能会有比较好的处理办法,比如可以找到这一列,然后更新整个cellTable, ...