建構函式初始化問題

2021-05-24 14:43:37 字數 1311 閱讀 2365

程式原始碼:

#include "stdafx.h"

#include

#include

#define pi 3.14

inline double sqr(double x)

class ccircle

;void setradius(double radiusval)

double getradius() const

double  area() const

void showdata();

protected:

double radius;

private:

};class ccylinder: public ccircle

void setheight(double heightval)

double getheight() const

double area() const

void showdata();

protected:

double height;

private:

};void ccircle::showdata()

void ccylinder::showdata()

int main(int argc, char* argv)

輸出結果:

circle radius = 1;

circle area = 3.14;

cylinder radius = 1;

cylinder height = 10;

cylinder area = 69.08

特別注意以下兩處:

1) ccircle(double radiusval=0):radius(radiusval){};

radius 是類的成員變數,當用此建構函式初始化類時, radius同時被賦值初始化;

2)class ccylinder: public ccircle

ccylinder 繼承自ccircle; 當ccylinder用此建構函式初始化時,成員變數height同時被初始化賦值為heightval; 繼承自父類ccircle的成員變數radius被初始化為radiusval(成員radius時用ccricle類中的構造杉樹呼叫實參radiusval進行初始化的。)

ccylinder類的函式getheight和setheight分別用於設定和查詢成員height.此類使用繼承的setradius和getradius處理成員radius。函式area取消了繼承的函式ccircle::area(), 返回圓柱體的表面積。注意:此函式明確的用到繼承函式ccircle::area().

建構函式初始化列表和初始化函式

其實並沒有所謂的初始化函式的概念,本文中的初始化函式只是說明在函式體內進行賦值。而初始化列表才是真正意義上的物件初始化。使用初始化列表效率會高一點。c 規定,物件的成員變數的初始化動作發生在進入建構函式本體之前。在建構函式體內只是賦值,並不是初始化。請看下面這個栗子 class base publi...

建構函式初始化(預設構造)

當且僅當沒有定義任何建構函式時,編譯器才會提供預設建構函式。為類定義了建構函式後,程式設計師就必須為他提供預設建構函式。我們怎麼理解這句話呢?首先,什麼是預設建構函式?預設建構函式時在未提供顯示初始化時,用來建立物件的建構函式。也就是說,它是用於下面這種宣告的建構函式 expa expa 然後我們看...

建構函式初始化列表

建構函式初始化列表以乙個冒號開始,接著是以逗號分隔的資料成員列表,每個資料成員後面跟乙個放在括號中的初始化式。例如 example example ival 0 dval 0.0 ival 和dval 是類的兩個資料成員 上面的例子和下面不用初始化列表的建構函式看似沒什麼區別 example exa...