124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- main.cpp ------------------------------------------------*- C++ -*-===//
224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                     The LLVM Compiler Infrastructure
424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source
624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details.
724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===//
924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1090e325d6aefb5e85c31982a745c4147b50dcac3cGreg Claytonclass Conversion
1190e325d6aefb5e85c31982a745c4147b50dcac3cGreg Clayton{
1290e325d6aefb5e85c31982a745c4147b50dcac3cGreg Claytonpublic:
1390e325d6aefb5e85c31982a745c4147b50dcac3cGreg Clayton    Conversion (int i) :
1490e325d6aefb5e85c31982a745c4147b50dcac3cGreg Clayton      m_i (i)
1590e325d6aefb5e85c31982a745c4147b50dcac3cGreg Clayton      {}
1690e325d6aefb5e85c31982a745c4147b50dcac3cGreg Clayton
1790e325d6aefb5e85c31982a745c4147b50dcac3cGreg Clayton    operator bool()
1890e325d6aefb5e85c31982a745c4147b50dcac3cGreg Clayton    {
1990e325d6aefb5e85c31982a745c4147b50dcac3cGreg Clayton        return m_i != 0;
2090e325d6aefb5e85c31982a745c4147b50dcac3cGreg Clayton    }
2190e325d6aefb5e85c31982a745c4147b50dcac3cGreg Clayton
2290e325d6aefb5e85c31982a745c4147b50dcac3cGreg Claytonprivate:
2390e325d6aefb5e85c31982a745c4147b50dcac3cGreg Clayton    int m_i;
2490e325d6aefb5e85c31982a745c4147b50dcac3cGreg Clayton};
2590e325d6aefb5e85c31982a745c4147b50dcac3cGreg Clayton
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass A
2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic:
2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    A(int i=0):
3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        m_a_int(i),
3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        m_aa_int(i+1)
3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
355d729a47805f472431a486e478a3f478c79cf8ceGreg Clayton    //virtual
3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ~A()
3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    int
4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetInteger() const
4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return m_a_int;
4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SetInteger(int i)
4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        m_a_int = i;
4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected:
5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    int m_a_int;
5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    int m_aa_int;
5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass B : public A
5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic:
5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    B(int ai, int bi) :
6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        A(ai),
6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        m_b_int(bi)
6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
655d729a47805f472431a486e478a3f478c79cf8ceGreg Clayton    //virtual
6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ~B()
6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    int
7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetIntegerB() const
7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return m_b_int;
7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SetIntegerB(int i)
7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        m_b_int = i;
7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected:
8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    int m_b_int;
8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
85d084c4b5bcb4b26dea7d66879b3862f03f3e09e7Johnny Chen#include <cstdio>
8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass C : public B
8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic:
8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    C(int ai, int bi, int ci) :
9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        B(ai, bi),
9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        m_c_int(ci)
9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
937bafa919529dd7e3d87e9c3649179029d0158978Johnny Chen        printf("Within C::ctor() m_c_int=%d\n", m_c_int); // Set break point at this line.
9424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
965d729a47805f472431a486e478a3f478c79cf8ceGreg Clayton    //virtual
9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ~C()
9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    int
10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetIntegerC() const
10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
10424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return m_c_int;
10524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
10624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
10724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SetIntegerC(int i)
10824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
10924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        m_c_int = i;
11024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
11224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected:
11324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    int m_c_int;
11424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
11524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
11624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerint
11724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnermain (int argc, char const *argv[])
11824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
11924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    A a(12);
12024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    B b(22,33);
12124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    C c(44,55,66);
12290e325d6aefb5e85c31982a745c4147b50dcac3cGreg Clayton    Conversion conv(1);
12390e325d6aefb5e85c31982a745c4147b50dcac3cGreg Clayton    if (conv)
12490e325d6aefb5e85c31982a745c4147b50dcac3cGreg Clayton        return b.GetIntegerB() - a.GetInteger() + c.GetInteger();
12590e325d6aefb5e85c31982a745c4147b50dcac3cGreg Clayton    return 0;
12624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
127