摘要:
1.如果基类中的成员函数是virtual类型的,其继承类中相应的函数也是virtual类型,并且基类对象的引用指向继承类对象时, 基类就可以调用继承类函数,否则调用的是基类函数class base{public:virtual void fun(){ printf("base fun");}};class derived:public base{public:void fun(){ printf("derived fun");}};derived der;base &b = der; //或者base *b = &der;b.fun(); 阅读全文
摘要:
1.可以将要拒绝的编译器会生成的函数自己定义为private的就可以,这样外部就无法调用这些函数,同时, 为了防止内部函数调用,可以只是声明函数,而不定义函数 如,拒绝使用copy构造函数 class Test { private: Test(const Test&); //可以不明确写出参数 }; 这样成员函数或者friend函数调用时,因为没有定义而在链接时报错,这样就可以提前发现. 2.可以定义一个base class,然后将要继承的函数放到private里,要拒绝自动生成的类可以继承该类 阅读全文
摘要:
1.如果自己没有声明,编译器会自动声明一个default构造函数,一个copy构造函数,一个copy assignment操作符和一个析构函数. 自动声明的这些函数都是public并且inline的,这些函数是在需要时编译器才声明的.class Test{};Test T1; //default构造函数Test T2(T1); //copy构造函数T2 = T1; //copy assignment操作符2.编译器产生的析构函数是no-virtual的,除非继承的父类的析构函数是virtual的3.如果自己声明了上面那四个函数,编译器不会再生成相应的函数.class Test{public:. 阅读全文
摘要:
三种访问权限public:可以被任意实体访问protected:只允许子类及本类的成员函数访问private:只允许本类的成员函数访问三种继承方式public 继承protect 继承private 继承组合结果基类中 继承方式 子类中public & public继承 => publicpublic & protected继承 => protectedpublic & private继承 = > privateprotected & public继承 => protectedprotected & protected继承 => protectedprotecte 阅读全文