007.类、构造函数

1、类和对象
对象:具体存在的,可以被描述的实体 属性和行为
类:具有共同属性和相同行为的多个对象的抽象

对象:具体的 实体
类:抽象的 概念

类是对象的抽象 对象是类得具体实例

2、创建和使用类
访问修饰符 [可选修饰符]class 类名
{
//类成员

//字段 》 数据

//属性 》 对字段的封装

//索引器 》 对集合类型字段的封装

//方法 》 对象的特殊行为

//事件 》 行为

//构造函数 》 初始化

}

字段:访问修饰符 数据类型 变量名;

使用:
a.创建对象
类名 对象名=new 类名();//相当于隐士创建了构造函数
b.给字段或者属性赋值
对象名.字段=值
c.调用方法
对象名.方法();
类的成员变量(字段)是默认初始化的。

3.构造函数
作用:创建对象并初始化
用来描述对象的创建过程

定义类的时候CLR会提供默认的构造函数(无参,方法体无语句);
定义构造函数:public Student(){}
访问修饰符 类名(参数列表)
{

}
this:当前实例(对象)

*构造函数 注:

*构造函数(构造方法)声明在类内部
*构造函数每次创建对象是被隐式调用
*构造函数常常用于初始化类成员
*构造函数与类同名
*构造函数不能声明返回值类型
*构造函数可以包含参数,参数一般是创建对象实力的前提条件
*每个类都必须至少有一个构造函数,若不提供,编译器自动生成一个无参构造函数
*在类中定义了构造函数,默认的构造函数就不再提供。
有参构造函数:
*如果类中定义了构造函数,建议添加无参构造函数
这就是构造函数的重载

4.修饰符
访问修饰符
public:公有的 类本身或者其他类
internal:程序集内可用
protected:受保护的 自身和子类可用
private:私有的 类自身

partial:分部类 在不同文件下创建两个类名相同的类在编译器编译时两个类都会被执行,编译成一个类

5.static

static成员:
在其他类中调用,用类名调用 类名.字段 类名.方法
在当前类中,实例方法和静态方法都可以直接调用

实例成员:
在其他类中调用,用对象调用 对象.字段 对象.方法
在当前类中,实例方法内直接调用 静态方法内 对象调用

注:
***方法或者字段写成static静态类型,在Main函数中可以用(类名.方法/类名.字段)的方式直接调用
***如果定义方法或者字段不加static 在Main函数中调用必须要先声明对象(类名 对象名=new 类名();) 然后才可以用(对象.方法/对象.字段)的方式调用,构造函数的字段也同样

静态类:
public static class()
{
//特征:
//所有成员必须是静态的 常量 静态字段 静态方法
//不能实例化(不能创建对象)
//不能被继承(不能创建子类)
}

静态构造函数:
用于初始化类的静态成员的
不能用访问修饰符,不能有任何参数
只被执行一次,不管创建多少个对象,只在类的第一个对象创建之前执行

关于static的练习:

1.创建汽车的类和构造函数

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 类和构造函数
{
class Car
{
public string type;
public int price;
public static int milestone;

public Car()
{
type = "保时捷911";
price = 198;
milestone = 20;
}
public static void Start()
{
Car st=new Car();
Console.WriteLine("{0}售价为{1},行驶里程{2},正在启动!", st.type, st.price,milestone);
}
public void Stop()
{
Console.WriteLine("{0}售价为{1},行驶里程{2},正在停止!", type, price, milestone);//在当前类中,实例方法内直接调用 静态方法内 对象调用

}
}
}

2.在Main中调用静态方法和非静态方法的方式

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 类和构造函数
{
class Program
{
static void Main(string[] args)
{

Car.Start();//静态方法在其他类中调用可以直接 类名.方法名() 调用
Car ct = new Car();
ct.Stop();//非静态方法在其他类中调用需要先声明类的对象,用 对象名.方法名() 调用
Console.ReadKey();
}
}
}

时间: 2024-11-08 22:23:37

007.类、构造函数的相关文章

C++ 初始化形式、变量初始化规则、类构造函数的初始化列表

类构造函数的初始化列表,举例 一个对象的构造分两部分,首先是分配空间,然后初始化. 只要有对象生成,不管是以什么形式生成,都会调用构造函数进行初始化. 然后下面有个例子,在蓝色区域Big类的复制构造函数中,使用初始化列表进行成员的初始化(方法1)没有问题,而如果不使用初始化列表.直接在函数里用里面注释掉的代码(方法2)则会报错:Base类没有合适的构造函数. // W3-课程作业2-4.cpp : Defines the entry point for the console applicati

WorldWind源码剖析系列:BMNG类构造函数深入分析

BMNG构造函数深入分析 一.主要类图 二.主要功能: 1)        BMNG类 BMNG类将包含以“Blue Marble”为主题的所有可渲染影像的根节点添加到当前星球的可渲染对象列表中,包括“ \Data\Earth\BmngBathy\”目录下的随源代码发布的12幅图像.从NASA服务器上下载的经过分层分级过的瓦片影像.根节点m_RenderableList主要用来存放下面三个RenderableObjectList类型对象:m_BlueMarbleList.m_ShadedList

C++中虚继承类构造函数的正确写法

最近工作中某个软件功能出现了退化,追查下来发现是一个类的成员变量没有被正确的初始化.这个问题与C++存在虚继承的情况下派生类构造函数的写法有关.在此说明一下错误发生的原因,希望对更多的人有帮助. 我们代码中存在虚继承的类的继承结构与下图类似,并不是教科书中经典的菱形结构.从 Intermediate1 和 Intermediate3 到Base2 的继承都是虚继承.Base1 和 Base2 都包含一些成员变量,并提供了相应的构造函数接受指定的初始化值.Base2 还有一个缺省构造函数,把其成员

c++派生类构造函数

在派生的过程中,构造函数和析构函数是不继承的,因此在初始化时,派生类的构造函数就必须完成基类的私有变量初始化. 解决问题的思路,在派生类调用基类的构造函数 执行派生类构造函数的顺序是: 调用基类构造函数,对基类数据成员初始化: 调用子对象构造函数,对子对象数据成员初始化: 再执行派生类构造函数本身,对派生类数据成员初始化. 派生类构造函数的总参数表列中的参数,应当包括基类构造函数和子对象的参数表列中的参数.基类构造函数和子对象的次序可以是任意的,如上面的派生类构造函数首部可以写成 Student

转:C++类构造函数初始化列表

构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式.例如: class CExample { public:     int a;     float b;     //构造函数初始化列表     CExample(): a(0),b(8.8)     {}     //构造函数内部赋值     CExample()     {         a=0;         b=8.8;     } }; 上面的例子中两个构造函数的结果是一样

C#中派生类调用基类构造函数用法分析

这里的默认构造函数是指在没有编写构造函数的情况下系统默认的无参构造函数 1.当基类中没有自己编写构造函数时,派生类默认的调用基类的默认构造函数例如: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 public class MyBaseClass { } public class MyDerivedClass : MyBaseClass {   public MyDerivedClass()   {    Console.WriteLine("我是子

派生类构造函数的定义和使用举例

1.派生类构造函数的一般形式为: 派生类构造函数名(总参数表):基类构造函数名(参数表) { 派生类中新增加数据成员初始化语句 } 2.在建立一个对象时,执行构造函数的顺序是: a.派生类构造函数先调用基类构造函数: b.再执行派生类构造函数本身(即派生类构造函数的函数体) 3.在派生类对象释放时,先执行派生类析构函数,再执行其基类析构函数 例:定义一个简单的派生类构造函数. 解:程序: #include<iostream> #include<string> using names

C++语言笔记系列之十三——派生类构造函数的调用

1.派生类构造函数的调用 (1)一个基类的所有数据成员均被派生类继承.创建一个派生类对象时,系统在为派生类对象分配单元时一定要为其基类数据成员分配子空间. (2)一个派生类对象在创建时不仅要调用派生类构造函数,而且要调用基类构造函数. 派生类中的数据成员在派生类中构造. 基类中的数据成员在基类中构造. 原因: A.构造函数不继承. B.派生类的构造函数必须通过调用基类的构造函数完成基类数据成员的初始化. C.若派生类中含有子对象,必须调用子对象的构造函数. 2.派生类的构造函数 派生类名(总参数

关于C#中派生类调用基类构造函数的理解

(1)当基类中没有自己编写的构造函数时,派生类默认条用基类的构造函数 (2)当基类中有自己编写的构造函数时,要在基类中添加无参的构造函数 Java代码   public class MyBaseClass { public MyBaseClass() { } public MyBaseClass(int i) { Console.WriteLine("我是基类带一个参数的构造函数"); } } public class MyDerivedClass : MyBaseClass { pu

c++类构造函数理解(转载)

记录一下我对C++类构造函数的理解. 首先,构造函数分成两种,默认构造函数和非默认构造函数(好吧,就这么叫它). 默认构造函数只能有一个,如果没有自定义构造函数,那么编译器将自动生成一个默认构造函数,当然这个构造函数不会做任何事情.如果程序定义了构造函数(包括默认和非默认),编译器都不再自动提供默认构造函数. 如class C, 对应自动生成的默认构造函数为C() { }; 程序员可以自定义默认构造函数,而且只能定义一个默认构造函数.如定义class A. Class A { public: /