Primer (十二)

struct A {
    int show() const { // 定义在类内的函数是内联的;const表示函数不能改变类的成员,a不能修改;
        return a;
    }
    A& combine(const A&); // 函数声明必须在类内,定义可以在类外;
    int a=1; // 成员变量,最好初始化,或者指定构造函数,默认初始化不同的编译器会产生不同的结果;
    int b=2;
};
A& A::combine(const A& c) { // 类外的成员函数定义,必须加A::修饰,默认形参传入this,一个指向当前对象的指针
    this->a+=c.a; // this是默认传入的,可以直接用
    b+=c.b; // 由于是成员函数,所以可以访问b
    return *this; // 返回*this即该对象,函数返回值是对该对象的引用;如果是show()const这种const成员函数,
默认传入的是const A * const this所以不能改变*this,const的对象、对象的引用、对象的指针,均只能使用带const的
常量成员函数
}
int main() {
    A a; // struct A a是等同的,直接用A a即可
    A b = a.combine(a);
    cout<<b.a<<endl;
    const A c;
    c.combine(a); // 错误,const对象c只能使用常量成员函数
    int d = c.show(); // 正确,show是常量成员函数
    return 0;
}
类内没有构造函数声明时,使用默认构造函数,参数默认构造,但是有些指针 数组复杂变量无法默认构造,会出错,尽量显式构造
struct B {
    B() = default; // 表示B()定义了一个默认构造函数
    B(){} // 定义了空的构造函数,和上面等同
    B(int in1,int in2):a(in1),b(++in2),c(0){} // 定义了构造函数,{}中为空因为没有需要执行的语句
    B(int); // 声明了构造函数,并未定义,在类外定义
    int a;
    int b;
    int c;
}
B::B(int aaa){a=aaa;} // 类外定义构造函数,所有构造函数无返回值,函数名与类名相同
class C { // class与struct唯一区别是,class默认为private,struct默认为public
    friend void function(int); // 声明function是友元,可以使用private变量,友元的声明位置可以在类内任意位置
    public:
    private:
       int a;
};
void function(int); // 类外也要声明该函数,类内的友元声明是额外的
void function(int a) {
    C c;
    c.a=a; // 友元可以访问private
    cout<<c.a<<endl;
}
main() {
    int a=10;
    function(a); // 10
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值