C++关于类的一些笔记

1. 友元函数不能直接访问对象数据成员,也不能通过this指针访问,只能用函数参数传递进来(访问规则和成员函数一致)
Class MyClass {
private;
    int num;
public:
    friend void print(MyClass &);
};
void print(MyClass &x) {
    cout << x.num << endl;
}
2. 派生类继承基类的成员,访问权限为继承规则和声明时权限最低的那个
基类中的成员public继承protected继承private继承
public成员publicprotectedprivate
protected成员protectedprotectedprivate
private成员不可直接访问不可直接访问不可直接访问
3. 函数的参数或返回值不是对象的引用都会调用类的拷贝构造函数构造中间对象
4. 类的拷贝构造函数参数必须为对象的引用,否则会无限递归(拷贝函数也是函数,递归原因参照 3.)
5. 类的构造函数调用顺序遵循:先调用基类,如果继承多个基类,按继承顺序调用;再调用类中成员变量的构造函数,按定义顺序调用;最后再执行该类的函数体
class Derived : public Base2, public Base1 {
public:
    Member member;
    Derived() : Base1(), Base2(), member() {
        cout << "Derived" << endl;
    }
};

构造函数函数体执行顺序:Base2->Base1->Member->Derived

6. 有一种情况只能用友元运算符重载而不能用成员运算符重载
complex2 = 100 + complex1;

如果用成员运算符重载,编译器解释为

complex2 = 100.operator(complex1);  //编译错误

如果用友元运算符重载则可以这样解决

friend Complex operator + (Complex complex, int num);
friend Complex operator + (int num, Complex complex);
7. 如果要delete掉一个指向无名派生类对象的基类指针,派生类的析构函数应该定义为虚函数
class Base {
public:
    //如果基类析构函数不定义为虚函数,delete时只会调用Base的析构函数虎
    virtual ~Base() {
        cout << "~Base()" << endl;
    }
};

class Derived : public Base {
public:
    ~Derived() {
        cout << "~Derived()" << endl;
    }
};

int main() {
    Base *p = new Derived;
    delete p;
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值