1.這里有基本的類繼承,屬性和方法訪問(wèn)控制權(quán)限測(cè)試.
2.protected 這個(gè)屬性不能在類的外部訪問(wèn).這個(gè)需要注意.
3.在繼承過(guò)程中,并且,父類的成員變量中有其他對(duì)象,多個(gè)類的構(gòu)造和析構(gòu)方法調(diào)用順序
4.靜態(tài)成員 初始化的標(biāo)準(zhǔn)寫法 以及在派生類中如何調(diào)用
5.子類和父類 同名變量和函數(shù)的調(diào)用.這里需要理解內(nèi)存四區(qū),子類和父類成員變量和函數(shù)的存儲(chǔ)位置.
//
// main.cpp
// C++訪問(wèn)控制測(cè)試
//
// Created by 扆佳梁 on 16/8/1.
// Copyright ? 2016年 Eric. All rights reserved.
//
#include <iostream>
using namespace std;
class A{
public:
int a = 0;
void setB(int b){
this->b = b;
}
protected: //不能被類對(duì)象訪問(wèn)
int b = 0;
private:
int c = 0;
};
class B:public A{
public:
void printB(){
printf("%d\n",b);//子類public 繼承父類,可以使用父類的protected 對(duì)象
}
};
class C:private A{
public:
void printB(){
printf("%d\n",b);
}
};
/**
* 在子類對(duì)象構(gòu)造時(shí)藤肢,需要調(diào)用父類構(gòu)造函數(shù)對(duì)其繼承得來(lái)的成員進(jìn)行初始化
在子類對(duì)象析構(gòu)時(shí)做个,需要調(diào)用父類析構(gòu)函數(shù)對(duì)其繼承得來(lái)的成員進(jìn)行清理
1玄叠、子類對(duì)象在創(chuàng)建時(shí)會(huì)首先調(diào)用父類的構(gòu)造函數(shù)
2伞辛、父類構(gòu)造函數(shù)執(zhí)行結(jié)束后惠况,執(zhí)行子類的構(gòu)造函數(shù)
*3择浊、當(dāng)父類的構(gòu)造函數(shù)有參數(shù)時(shí),需要在子類的初始化列表中顯示調(diào)用
4、析構(gòu)函數(shù)調(diào)用的先后順序與構(gòu)造函數(shù)相反 先析構(gòu)自己的,再析構(gòu)父類
3.3.4繼承與組合混搭情況下氛谜,構(gòu)造和析構(gòu)調(diào)用原則 就是當(dāng)一個(gè)類對(duì)象作為父類屬性的時(shí)候 ,
原則:
先構(gòu)造父類,再構(gòu)造成員變量区端、最后構(gòu)造自己
先析構(gòu)自己值漫,在析構(gòu)成員變量、最后析構(gòu)父類
*
*/
/**
* 同名成員變量 和 成員函數(shù) 總結(jié):同名成員變量和成員函數(shù)通過(guò)作用域分辨符進(jìn)行區(qū)分
*/
class Base{
public:
int a,b;
static int c;
void print(){
cout<<"a:"<<a<<"b:"<<b<<endl;
}
};
class Derived:public Base{
public:
int b,c;
void print(){
cout<<"c:"<<c<<"b:"<<b<<endl;
}
void printStatic(){
cout<<"static C:"<<Base::c<<endl;
}
};
/**
* 靜態(tài)成員初始化
靜態(tài)成員屬于類作用域织盼,但不屬于類對(duì)象杨何,和普通的static變量一樣,程序一運(yùn)行就分配內(nèi)存并初始化沥邻,生命周期和程序一致晚吞。
所以,在類的構(gòu)造函數(shù)里初始化static變量顯然是不合理的谋国。
靜態(tài)成員其實(shí)和全局變量地位是一樣的槽地,只不過(guò)編譯器把它的使用限制在類作用域內(nèi)(不是類對(duì)象,它不屬于類對(duì)象成員)芦瘾,要在類的定義外(不是類作用域外)初始化捌蚊。
*/
int Base::c = 10;// 這種事標(biāo)準(zhǔn)寫法
int main(int argc, const char * argv[]) {
// insert code here...
std::cout << "Hello, World!\n";
//第一步,看調(diào)用的是否在類內(nèi)部, 這里在main函數(shù)中,使用對(duì)象訪問(wèn).
//第二步,看子類 對(duì) 父類的繼承,是 public ,protected,還是private
//第三步,看父類的方法,屬性的訪問(wèn)控制權(quán)限.
A a = A();
B b = B();
b.printB();
C c = C();
c.printB();
/**
* 測(cè)試 子類與父類的同名變量的調(diào)用
*/
Derived d;
d.a = 1;
d.Base::b = 2;
d.b = 3;
d.c = 4;
Base::c = 20;
d.Base::print();
d.print();
d.printStatic();
return 0;
}