第10章 面向对象

1、面向对象设计的三个基本原则:封装、继承、多态
2、C++的空类默认产生哪些成员函数? 默认构造函数、析构函数、默认拷贝构造函数、赋值函数
3、C++中的struct和class的唯一不同点:sruct里的默认访问控制是public,class里的默认访问控制是private
4、使用静态成员变量在一个类的所有实例间共享数据,则每次创建一个类的对象时都要对静态数据成员进行一次初始化操作(静态数据成员可用于统计实例化对象的个数)
5、初始化列表的初始化变量赋值顺序是根据成员变量的声明顺序来执行
6、const成员变量必须在构造函数的初始化里面赋值或者将其设置成static
class A
{
A(){const int Size=9;}
};
或者

 class A
      {
            static const int Size=9;
      };

7、MFC类库中,将CObject的析构函数设置为virtual型,则所有CObject类的派生类的析构函数都将自动变为virtual型,这保证了不会出现由于析构函数未被调用而导致的内存泄漏(为什么虚拟的析构函数是必要的)
8、虚函数采用一种虚调用的方法。虚调用是一种可以在只有部分信息的情况下工作的机制,特别允许我们调用一个只知道接口而不知道其准确对象类型的函数。但是如果要创建一个对象,就势必知道对象的准确类型,因此构造函数不能为虚。
9、由于每个虚函数的对象都必须维护一个V表,因此使用虚函数时会产生一个系统开销。如果仅是一个很小的类,且无派生类,那么没必要使用虚函数
10、析构函数可以是内联函数
11、#include <iostream>
using namespace std;
class B
{
public:
B()
{
cout<<"default constructor"<<endl;
}
~B()
{
cout<<"destructed"<<endl;
}
B(int i):data(i)
{
cout<<"constructed by parameter" << data <<endl;
}
private:
int data;
};
B Play( B b)
{
cout << "mytest!" << endl;
return b ;
}
int main(int argc, char* argv[])
{
B temp = Play(5);
return 0;
}

(1)这里应该是几次析构呢? 参数传递一次、Play(5)返回B对象一次、对temp的构造一次
(2)Play(5),形参类型是类,而5是常量,合法吗?
合法。单个参数的构造函数如果不添加explicit关键字,会定义一个隐含的类型转换;添加explicit就会消除这种隐
含变换。
11、C++的多态性是通过虚函数实现的,最常见的用法是声明基类的指针,用该指针指向任意一个子类对象,调用相应的虚函数,可根据指向的子类的不同实现不同的方法
例1:

#include<iostream>
using namespace std;

class A
{
public:
    void foo()
    {
        printf("1\n");
    }
    virtual void fun()
    {
        printf("2\n");
    }
};
class B : public A
{
public:
    void foo()
    {
        printf("3\n");
    }
    void fun()
    {
        printf("4\n");
    }
};
int main(void)
{
    A a;
    B b;
    A *p = &a;
    p->foo();
    p->fun();
    p = &b;
    p->foo();
    p->fun();
    return 0;
}

更多对多态的解释,这里参考博文:(1)http://blog.csdn.net/zyq0335/article/details/7657465
(2)http://blog.csdn.net/hackbuteer1/article/details/7475622

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值