1、父类指针可以指向子类对象

静态联翩:如果以父类指针指向派生类对象,那么经由该指针只能访问父类定义的函数

动态联编:根据指针实际指向的对象类型确定

2、面试宝典 P110 面试题5 

#include<iostream>
#include<string>
#include<vector>
using namespace std;
class B
{
private:
int data;
public:
B()
{
cout<<"default constructor"<<endl;
}
~B()
{
cout<<"destructed "<<endl;
}
B(int i):data(i)
{
cout<<"constructor by parameter"<<data<<endl;
}
}; B Play(B b)
{return b;} int main(int agrc,char* argv[])
{
B temp=Play(5);//why?
return 0;
}

 

3、delete与delete[]的区别

如果动态创建一个对象数组,用delete只能对数据中的第0个对象元素调用析构函数。其他不对象元素不可能调用。而delete[] 对所有数组中所有对象元素调用析构函数。如果你的数组中对象在创建时,其成员也是动态创建的,则用delete必然内存泄露。

4、如何给字符串数组赋值?

用strcpy函数

5、操作符operator错写为operate

6、自己编写string类

//mystring.h
class String
{
public:
String (const char *str=NULL);//普通构造函数
String(const String &other);//拷贝构造函数
~String(void);
String & operator=(const String &other);
void print();
private:
char *m_data;//有动态申请的成员,所以需要自己定义拷贝构造函数和赋值函数
};
//mystring.cpp
#include<iostream>
#include"mystring.h"
using namespace std; String::String(const char *str)
{
if(str==NULL)
{
m_data=new char[1];
*m_data='\0';
}
else
{
m_data=new char[strlen(str)+1];
strcpy(m_data,str);
}
}
String::~String(void)
{
delete [ ] m_data;
} String::String(const String &other)
{
m_data=new char[strlen(other.m_data)+1];//深拷贝
strcpy(m_data,other.m_data);
}
String & String::operator=(const String &other)
{
if(this==&other)//这个if很重要。当传入的参数和当前实例(*this)是同一实例(指向同一内存),那么一旦释放自身内存,传入的参数的内存也同时被释放,因此
                 //再也找不到赋值的内容了!!!!!!!
return *this;
delete [] m_data;
m_data=new char[strlen(other.m_data)+1];//新申请空间,深拷贝
strcpy(m_data,other.m_data);
return *this;
} void String::print()
{
cout<<m_data<<endl;
}
//test.cpp
#include<iostream>
#include"mystring.h"
using namespace std;
void main()
{
String str("hello");
str.print();
String str1;
str1=str;
}

7、关键字static三个主要作用

  • 函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
  • 在模块(如.cpp文件)内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量
  • 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。

20140408 父类指针指向子类对象 ;delete ;static作用的更多相关文章

  1. C++析构函数的自动调用(用于父类指针指向子类对象,内存泄漏问题)

    class A {public:A() { printf("A \n"); }~A() { printf(" ~A \n"); } // 这里不管写不写virt ...

  2. C#多态;父类引用指向子类对象;new和override的区别;new、abstract、virtual、override,sealed关键字区别和使用代码示例;c#类的初始化顺序

    关于父类引用指向子类对象 例如: 有以下2个类 public class Father { public int age = 70; public static string name = " ...

  3. 父类指针指向子类内存,为什么当父类的成员函数不加virtual时,访问的还是父类的成员函数,而不是子类同名的成员函数

    我认为是这样,类的成员函数都在代码区,不同的类的成员函数在代码区有自己的类名称空间限制,类的虚函数在虚函数表中,程序执行的时候,是先在虚函数表中找该成员函数,如果没有找到,就去该类在代码区的成员函数中 ...

  4. java多态性,父类引用指向子类对象

    父类引用指向子类对象指的是: 例如父类Animal,子类Cat,Dog.其中Animal可以是类也可以是接口,Cat和Dog是继承或实现Animal的子类. Animal animal = new C ...

  5. OC3-父类指针指向子类对象

    // // Cat.h // OC3-父类指针指向子类对象 // // Created by qianfeng on 15/6/17. // Copyright (c) 2015年 qianfeng. ...

  6. java 父类引用指向子类对象---动态绑定

    知识点: 1.java 中父类引用指向子类对象时动态绑定针对的只是子类重写的成员方法: 2.父类引用指向子类对象时,子类如果重写了父类的可重写方法(非private.非 final 方法),那么这个对 ...

  7. Java多态-如何理解父类引用指向子类对象

    java多态,如何理解父类引用指向子类对象 要理解多态性,首先要知道什么是“向上转型”. 我定义了一个子类Cat,它继承了Animal类,那么后者就是前者是父类.我可以通过   Cat c = new ...

  8. Java多态 父类引用指向子类对象

    Java多态的三个必要条件: 1. 继承 2. 子类重写父类方法 3. 父类引用指向子类对象 然后看一个例子 输出结果为: 给出结论:Father  c  =  new  Child()    在c的 ...

  9. 向上转型---父类引用指向子类对象 A a = New B()的使用

    一.向上转型 向上转型是JAVA中的一种调用方式,是多态的一种表现.向上转型并非是将B自动向上转型为A的对象,相反它是从另一种角度去理解向上两字的:它是对A的对象的方法的扩充,即A的对象可访问B从A中 ...

随机推荐

  1. Ubuntu 14.04/16.04/18.04安装最新版Eigen3.3.5

    https://blog.csdn.net/xiangxianghehe/article/details/81236299 sudo cp -r /usr/local/include/eigen3 / ...

  2. AcWing 199. 余数之和 (除法分块)打卡

    给出正整数n和k,计算j(n, k)=k mod 1 + k mod 2 + k mod 3 + … + k mod n的值. 例如j(5, 3)=3 mod 1 + 3 mod 2 + 3 mod ...

  3. [NOIP模拟13]题解

    A.矩阵游戏 其实挺水的? 考场上根本没有管出题人的疯狂暗示(诶这出题人有毛病吧这么简单的东西写一大堆柿子),而且推公式能力近乎没有,所以死掉了. 很显然乘法有交换率结合率所以操作顺序对最终结果没什么 ...

  4. H. GSS and Simple Math Problem--“今日头条杯”首届湖北省大学程序设计竞赛(网络同步赛)

    题目描述:链接点此 这套题的github地址(里面包含了数据,题解,现场排名):点此 题目描述 Given n positive integers , your task is to calculat ...

  5. /etc/X11/xorg.conf

    # This configuration file was broken by system-config-keyboard Section "ServerLayout" Iden ...

  6. 虚拟机安装(Cent OS)

    转载:http://www.cnblogs.com/kkdd-2013/p/3973807.html 0 前言 本篇主要介绍在虚拟机VMware上安装CentOS6.5的过程,并且在自己电脑上安装成功 ...

  7. python random生成随机手机号

    上代码 #--------------- #!/usr/bin/python #_*_coding:UTF-8_*_ import random #生成随机手机号 str_start=random.c ...

  8. systemctl命令配置系统服务

    1.systemd的配置文件目录 systemd将daemon执行的脚本视作服务单位(unit),服务依据功能区分时,分为不同的类型(type). 常见的systemd服务类型如下表: 后缀名称    ...

  9. Windows的安全模型

    1. 安全身份 Windows的安全模型是以用户为线索的,用户的身份是在登录系统时验证的. 除了用户外,还可以有一些特殊实体需要拥有安全的身份,以便进行验证,比如groups, domain等等. W ...

  10. 高并发下的缓存架构设计演进及redis常见的缓存应用异象解决方案

    待总结 缓存穿透 缓存击穿 缓存雪崩等