条款00: 导读

  • 声明: 告诉编译器名称和类型,但略去细节
extern int x;
std::size_t numDigits(int number);
class Widget;
template<typename T>
class GraphNode;
  • 定义: 提供编译器声明所遗漏的细节
int x;
std::size_t numDigits(int number) //统计整数多少位
{
    std::size_t digitsSoFar = 1;
    while ((number /= 10) != 0)
    {
        digitsSoFar += 1;
    }
    return digitsSoFar;
}
class Widget
{
public:
    Widget();
    ~Widget();
};
template<typename T>
class GraphNode
{
    GraphNode();
    ~GraphNode();
};
  • 初始化: 给予对象初始值的过程
    • 默认构造函数: 不带任何实参,或者每个实参都有缺省值
class A
{
public:
    A();
};
class B
{
public:
    explicit B(int x = 0, bool b = true);
};
class C
{
public:
    explicit C(int x);
};

explicit: 阻止被用来执行隐式类型转换

void doSomething(B object);
void Fun0()
{
    B bObj1;
    doSomething(bObj1);

    B bObj2(28);
    doSomething(bObj2);

    doSomething(28); //不存在从"int"到"B"适当的构造函数

    doSomething(B(28));
}
    • 拷贝构造函数: 以同型对象初始化自我对象
    • 拷贝赋值: 从另一个同型对象中拷贝其值到自我对象
class Widget
{
public:
    Widget();
    Widget(const Widget& rhs);
    Widget& operator=(const Widget& rhs);
};

void hasAcceptableQuality(Widget w);
void Fun1()
{
    Widget w1;    //默认构造
    Widget w2(w1);    //拷贝构造
    Widget w2 = w1; //拷贝构造
    hasAcceptableQuality(w1); //值传递,拷贝构造
    w1 = w2;//拷贝赋值
}

 

posted @ 2024-08-25 22:36  博瑜图形  阅读(18)  评论(0)    收藏  举报